命令执行有问题

Having troubles with a command's execution

所以,基本上我所做的是,在 TextBox 上添加诊断后,我检查是否已经有同名的诊断。连接工作正常,但是,我在此处的这一行中执行命令时遇到困难:

 var count = (int)cmd.ExecuteNonQuery();

这是完整的方法

 protected void MesmoDiagnostico_ServerValidate(object source, ServerValidateEventArgs args)
    {
        string connectionString = ConfigurationManager.ConnectionStrings["BDClinica"].ConnectionString;
        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("Select COUNT(*) from Diagnosticos Where Diagnostico_Nome=@Diagnostico_Nome", connection);
        connection.Open();
        cmd.Parameters.AddWithValue("@Diagnostico_Nome", source);
        var count = (int)cmd.ExecuteNonQuery();

        if (count > 0)
        {
            args.IsValid = false;
        }
        else
        {
            args.IsValid = true;
        }

        connection.Close();
    }  

我错过了什么吗?谢谢!

根据MSDNExecuteNonQuery用于执行目录或UPDATE/INSERT/DELETE操作和returns的数量行受影响。通过使用 COUNT,您仍在寻找 "number of rows",但它是作为查询执行的,而不是更新。

由于您只需要一条数据,从技术上讲是第一行的第一列,您可以使用 ExecutScalar 代替。

这几乎就是您需要的代码:

SqlConnection con = new SqlConnection(Settings.Default.FrakoConnectionString);
SqlCommand maxcommand = new SqlCommand("SELECT MAX(Counter) AS max FROM ppartikulieren", con);
try
{
    con.Open();
    max = (int)maxcommand.ExecuteScalar() + 1;
}
catch (Exception ex)
{
    MessageBox.Show("Fout bij het plakken:\n" + ex.Message, "Frako planner", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
}
finally
{
    con.Close();
}

当然你也可以使用using语句。但关键是你真的需要转换 ExecuteScalar.

的输出