如何检查ExecuteNonQuery是否成功?

时间:2014-05-10 23:15:38

标签: c# sql-server-2005

如何在命令行中检查executetenonquery是否成功c#需要检查nonaquery是否为true?  make execute

时几乎返回值-1
        using (SqlConnection con = new SqlConnection(constr))
        {
            con.Open();

            using (SqlCommand scm = new SqlCommand())
            {
                scm.Connection = con;
                scm.CommandText = "select [BOOk_ID],[Member_id] from [borrow] where BOOk_ID="+textBox19.Text  +" AND  Member_id ="+textBox18.Text  +"";


                int h = scm.ExecuteNonQuery();
                 //need check if nonaquery true
                 if( )
                {
                    using (SqlCommand scm2 = new SqlCommand())
                    {
                        scm2.Connection = con;
                        scm2.CommandText = "delete from Borrow where  BOOk_ID=" + textBox19.Text + " AND  Member_id =" + textBox18.Text + "";
                        scm2.ExecuteNonQuery();
                    }
        }

1 个答案:

答案 0 :(得分:0)

ExecuteNonQuery用于更新,插入,删除或执行某些管理命令的查询,而不是用于检索一个或多个记录的查询。在您的情况下,您使用SELECT语句来检索记录,因此您应该使用ExecuteReader或使用SqlDataAdapter来填充DataSet或DataTable。

使用ExecuteReader时,检查属性HasRows,然后尝试使用Read方法读取记录,使用SqlDataAdapter只计算表中存在的行数。

using (SqlConnection con = new SqlConnection(constr))
{
    con.Open();
    using (SqlCommand scm = new SqlCommand())
    {
        scm.Connection = con;
        scm.CommandText = @"select [BOOk_ID],[Member_id] from [borrow] where 
                            BOOk_ID=@bkid AND Member_id =@mbid";
        scm.Parameters.AddWithValue("@bkid", textBox19.Text);
        scm.Parameters.AddWithValue("@mbid", textBox18.Text);
        using(SqlDataReader reader = scm.ExecuteReader())
        {
            if(reader.HasRows())
            {
               reader.Read();
               using (SqlCommand scm2 = new SqlCommand())
               {
                   scm2.Connection = con;
                   scm2.CommandText = @"delete from Borrow where
                                      BOOk_ID=@bkid AND Member_id =@mbid";
                   scm2.Parameters.AddWithValue("@bkid", textBox19.Text);
                   scm2.Parameters.AddWithValue("@mbid", textBox18.Text);
                   scm2.ExecuteNonQuery();
               }
           }
        }
    }
}

请注意,我已将查询更改为参数化查询,以避免Sql注入和解析问题。

然而,查看您的代码,我认为您根本不需要调用第一个查询来检查该书是否存在然后将其删除。您可以立即删除它。如果记录不存在,则数据库无法删除任何内容。

最后一点。当SqlDataReader使用连接时,它不能用于对数据库执行其他操作。您需要将MultipleActiveResultSets=True

添加到连接字符串中