遇到命令执行的麻烦

时间:2015-02-24 19:04:59

标签: c# command

所以,基本上我正在做的是,在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();
    }  

我错过了什么吗?谢谢!

2 个答案:

答案 0 :(得分:1)

根据MSDNExecuteNonQuery用于执行目录或UPDATE / INSERT / DELETE操作,并返回受影响的行数。通过使用COUNT,您仍然在寻找“行数”,但它是作为查询执行的,而不是更新。

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

答案 1 :(得分:0)

这几乎是您需要的确切代码:

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的输出。