当前位置: 首页 > article >正文

SqlCommand.ExecuteNonQuery()方法的使用注意

SqlCommand.ExecuteNonQuery 方法对数据库连接执行 Transact-SQL 语句并返回受影响的行数。但是有个前提:必须是UPDATE、INSERT 和 DELETE 语句。而对于所有其他类型的语句,返回值则为 -1或0。如果发生回滚,返回值为 -1

对于增删改数据操作,根据ExecuteNonQuery()方法执行结果是否大于0(mark= Comm.ExecuteNonQuery()>0?true:false; )来判断数据库操作是否成功是可以的。对于Update,Insert,Delete语句执行成功时返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚的话返回值为-1。所以利用ExecuteNonQuery()返回值是否大于0来判断操作是否成功是可以的。但是还有一些情况不是这样:

1,使用ExecuteNonQuery()执行Select查询操作,不管是否成功,结果总是会返回-1. 通常我们是建议用该方法执行Select的,可以使用ExecuteScalar(),ExecuteReader(),SqlDataAdapter执行。
2,使用ExecuteNonQuery() 执行存储过程。这分两种情况:
1)存储过程带有返回值(传出参数)时,
把数据库中受影响的行数赋给返回值,这时得到的返回值是受影响的函数(大于或等于0的整数).
把某个值赋给返回值.这时得到的返回值就是这个值。
2)存储过程没有返回值
执行成功后总是返回-1。
(我们可能会想,当执行增删改操作的存储过程即使没有返回值也应该得到受影响的行数 , 但是.我们在ado.net中执行存储过程的时候,dotnet 自动为给了存储过程一个默认值:set nocount on;
所以给我们的感觉是执行存储过程默认返回 -1 )
3,对数据结构的操作将会返回-1,例如执行Create操作,当创建数据表成功时返回-1,如果操作失败的话(数据表已经存在)往往会发生异常,所以执行这种操作时最好用try–catch–语句来容错。

用ExecuteNonQuery()方法執行create操作

SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=PSDB;Integrated Security=SSPI");string str = "CREATE TABLE aaa ( " +
"[ID] [int] IDENTITY (1, 1) NOT NULL , " +
"[BasicID] [int] NULL ," +
"[AdoptedName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptedSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptBirthday] [smalldatetime] NULL ," +
"[AdoptedType] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ," +
"[ApprTime] [smalldatetime] NULL ," +
"[Remark] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL " +
") ON [PRIMARY] ";SqlCommand comm = new SqlCommand(str, conn);
int i = 10;
try
{
conn.Open();
i = comm.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}Response.Write(i.ToString());

如果执行成功的话,返回值为-1,如果数据表存在返回异常:数据库中已存在名为‘aaa’的对象。

http://www.lryc.cn/news/2414657.html

相关文章:

  • Delicatessen音乐名词什么意思
  • Tribon二次开发-COM接口的使用(抽取数据)
  • 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)
  • dubbo和zookeeper
  • Bloom filter 过滤(布隆过滤算法)原理
  • C语言实现集合的基本运算
  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程
  • 格兰杰因果分析
  • 文件的简单写入
  • kail-信息收集之DNS解析(dnsenum、dnsrecon、dnswalk)
  • free mobile sex java_Mysql-从原理到优化,深入浅出数据库索引
  • VC2010使用过程常见问题
  • java的编程思想是什么'_编程思想 是什么
  • 栅栏密码(Fence crypto)
  • 监控公司局域网电脑的软件|局域网电脑监控软件哪个好用
  • 61850通讯流程
  • python中dumps、dump、load、loads的区别
  • 安装 USB-Blaster 驱动程序
  • Fire Game (连通块+两点bfs)
  • sobel算子实现原理和c++实现sobel()检测边缘函数
  • IO流原理及流的分类FileInputStream类和FileOutputStream类基本介绍
  • 一些使用频率高的指令及库版本安装切换