(原创)ADO.NET中ExecuteNonQuery() 返回值问题
:
最近,老是用到cmd.ExecuteNonQuery(),然后在判断返回值的问题上出现了问题,索性就自己试验了以下执行不同操作时的返回值。
这是此函数的官方说明(下图):

1.建表:
1 private void CreateTable() 2 2 { 3 3 try 4 4 { 5 5 string createTableSql = @"create table dbo.TestTable([Data1] [varchar](50) NULL)"; 6 6 cmd.Connection = conn; 7 7 cmd.CommandText = createTableSql; 8 8 conn.Open(); 9 9 int resultCount = cmd.ExecuteNonQuery(); 10 10 Console.WriteLine(string.Format("创建表成功的返回值为:{0}!", resultCount)); 11 11 Console.ReadKey(); 12 12 } 13 13 catch (Exception ex) 14 14 { 15 15 Console.WriteLine(string.Format("Method:CreateTable异常,异常信息为:{0}", ex.Message.ToString())); 16 16 Console.ReadKey(); 17 17 } 18 18 finally 19 19 { 20 20 conn.Close(); 21 21 } 22 22 }
1)当表不存在时:

此时,ExecuteNonQuery()的返回值为-1;
2)当表存在时:

此时,会抛异常;
2.向表insert数据:
1 try 2 { 3 string insertSql = @"insert into dbo.TestTable([Data1]) values('TestData')"; 4 cmd.CommandText = insertSql; 5 cmd.Connection = conn; 6 conn.Open(); 7 int result = cmd.ExecuteNonQuery(); 8 Console.WriteLine(string.Format("向表插入数据成功,ExecuteNonQuery返回值为:{0}!", result)); 9 Console.ReadKey(); 10 } 11 catch (Exception ex) 12 { 13 Console.WriteLine(string.Format("Method:InsertData异常,异常信息为:{0}!", ex.Message.ToString())); 14 Console.ReadKey(); 15 } 16 finally 17 { 18 conn.Close(); 19 }
1)插入数据成功时:

此时,返回的是受影响的行数(只插入了一行数据);
2)插入数据失败时:

此时,会抛异常(示例为:插入的数据长度超过了数据库字段长度);
3.update表中数据:
1 try 2 { 3 string updateSql = @"update dbo.TestTable set [Data1] = '已修改'"; 4 cmd.CommandText = updateSql; 5 cmd.Connection = conn; 6 conn.Open(); 7 int result = cmd.ExecuteNonQuery(); 8 Console.WriteLine(string.Format("更新数据成功,ExecuteNonQuery返回值为:{0}!", result)); 9 Console.ReadKey(); 10 } 11 catch (Exception ex) 12 { 13 Console.WriteLine(string.Format("Method:UpdateData异常,异常信息为:{0}!", ex.Message.ToString())); 14 Console.ReadKey(); 15 } 16 finally 17 { 18 conn.Close(); 19 }
1)修改成功时:

此时,返回的时受影响的行数(数据表中只有四条记录);
2)修改失败时:
此时,会抛异常;
4.delete表中数据:
1 try 2 { 3 string deleteSql = @"delete from dbo.TestTable"; 4 cmd.CommandText = deleteSql; 5 cmd.Connection = conn; 6 conn.Open(); 7 int result = cmd.ExecuteNonQuery(); 8 Console.WriteLine(string.Format("删除数据成功,ExecuteNonQuery返回值为:{0}!", result)); 9 Console.ReadKey(); 10 } 11 catch (Exception ex) 12 { 13 Console.WriteLine(string.Format("Method:DeleteData异常,异常信息为:{0}!", ex.Message.ToString())); 14 Console.ReadKey(); 15 } 16 finally 17 { 18 conn.Close(); 19 }
1)删除成功时:

此时,返回的是受影响的函数(数据表中只有四条记录);
2)删除失败时:
此时,会抛异常;
5.删除表
1 try 2 { 3 string dropSql = @"drop table dbo.TestTable"; 4 cmd.CommandText = dropSql; 5 cmd.Connection = conn; 6 conn.Open(); 7 int result = cmd.ExecuteNonQuery(); 8 Console.WriteLine(string.Format("删除表成功,ExecuteNonQuery返回值为:{0}!", result)); 9 Console.ReadKey(); 10 } 11 catch (Exception ex) 12 { 13 Console.WriteLine(string.Format("Method:DropTable异常,异常信息为:{0}!", ex.Message.ToString())); 14 Console.ReadKey(); 15 } 16 finally 17 { 18 conn.Close(); 19 }
1)删除成功时:

此时,返回值为-1;
2)删除失败时
此时,会抛异常;
综上:
1)返回值为受影响行数的情况:insert/update/delete
2)返回值为-1的情况:create/drop table
此结论仅供参考,如有错误,请大神指出请。
若有问题,联系qq:445016465修改;

浙公网安备 33010602011771号