确定 ExecuteNonQuery 成功执行 [重复]

Posted

技术标签:

【中文标题】确定 ExecuteNonQuery 成功执行 [重复]【英文标题】:Determine that ExecuteNonQuery executed successfully [duplicate] 【发布时间】:2016-12-09 05:03:12 【问题描述】:

如何知道数据是否成功插入数据库,或者执行ExecuteNonQuery()时是否出错?

con.Open();

SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into DOCUMENT(NUM_D_ORDRE_DOC,ID_PERSONE,TYPE_DOC,PRIX_DOC,DATE_DE_MISE_EN_CHARGE,DATE_CREATION)values('"+TextBox1.Text+"','1','"+TextBox2.Text+"','"+TextBox4.Text+"','"+TextBox3.Text+"','"+ @DateTime.Now + "');";

cmd.ExecuteNonQuery();
con.Close();

【问题讨论】:

您可以通过正确使用 try catch 块进行检查。 另见Get affected rows on ExecuteNonQuery。请阅读How to Ask 并在提问前尝试搜索。另外,请阅读有关 SQL 注入和参数化查询的信息。 【参考方案1】:

如果由于某种原因插入失败,cmd.ExecuteNonQuery() 会抛出异常。

如果您真的很偏执,您可以检查cmd.ExecuteNonQuery() 方法调用的返回值,并验证它是否为刚刚插入的记录返回一 (1)。

注意:考虑使用参数绑定而不是字符串连接,以避免遭受 SQL 注入和简单的引用错误。

【讨论】:

【参考方案2】:

可以查看ExecuteNonQuery()的返回值。

像这样:

int rowsAffected = cmd.ExecuteNonQuery();

如果发生任何错误,它会抛出异常。

更多信息:ExecuteNonQuery Method

【讨论】:

【参考方案3】:

这应该回答你的问题:

对于 UPDATE、INSERT 和 DELETE 语句,返回值为 受命令影响的行数。当触发器存在于 正在插入或更新的表,返回值包括数字 受插入或更新操作和数量影响的行数 受触发器或触发器影响的行数。对于所有其他类型的 语句,返回值为-1。如果发生回滚,则返回 值也是-1。

来源:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

【讨论】:

以上是关于确定 ExecuteNonQuery 成功执行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SqlCommand的四大方法

C# sqlserver ExecuteNonQuery()方法详解

sql查询之ExecuteNonQuery

SqlCommand.ExecuteNonQuery 抛出 Collection 被修改;枚举操作可能无法执行

ExecuteNonQuery,ExecuteReader,ExecuteScalar 区别

返回标识值时的 ExecuteScalar 与 ExecuteNonQuery