先前做一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 。但是实际上并不是这样的,好在处理的数据操作多时 修改, 插入, 删除,否则的话问题就有点打了,都是些基础的知识,但是很重要个人觉得有必要记下来。
ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话利用try--catch--语句来容错。
例如用ExecuteNonQuery()方法执行create操作
我这里调用的是存储过程
Public Function AddUserWork(enWorkRecord As WorkRecordEntity, ByVal enUser As User.UserEntity) As Boolean Implements IWorkRecord.AddUserWork
Dim bnt As Boolean = False
Dim addWorkFlag As Integer
Dim addWork As String
Dim sqlHelper As New SqlHelper.sqlHelper()
'参数集合
Dim sqlParameters = New SqlParameter() {
New SqlParameter("@userID", enWorkRecord.UserID),
New SqlParameter("@logDate", enWorkRecord.LogDate),
New SqlParameter("@logTime", enWorkRecord.LogTime),
New SqlParameter("@logOutDate", enWorkRecord.LogOutDate),
New SqlParameter("@logOutTime", enWorkRecord.LogOutTime),
New SqlParameter("@computer", enWorkRecord.Computer),
New SqlParameter("@statue", enUser.Statue)
}
'存储过程
addWork = "PROC_UserRecord"
Try
'执行带参数过程
addWorkFlag = sqlHelper.ExecuteNoQuery(addWork, CommandType.StoredProcedure, sqlParameters)
''判断实行是否成功
If addWorkFlag > 0 Then
bnt = True
End If
Catch ex As Exception
Throw New Exception
End Try
Return bnt
End Function
如果执行成功的话 返回的值为-1,如果数据表已经存在的话返回异常:数据库中已存在。
这里也可以不用判断返回值,直接用return返回值 , 可以改为
Try
'执行带参数过程
Return sqlHelper.ExecuteNoQuery(addWork, CommandType.StoredProcedure, sqlParameters)
''判断实行是否成功
Catch ex As Exception
Throw New Exception
End Try
存储过程代码如
-- Author: 韩艳坤 <Author,,Name> -- Create date: <2013-03-06,,> -- Description: <主要执行对用户表的状态更改,和对用户操作记录的添加,> -- ============================================= ALTER PROCEDURE [dbo].[PROC_UserRecord] @statue char(15), @userID varchar(15),@logDate varchar(20),@logTime varchar(20),@logOutDate varchar(20),@logOutTime varchar(20),@computer char(15) AS update T_User set statue =@statue where userID =@userID insert into T_WorkRecord(userID,logDate,logTime,logOutTime,computer) values (@userID,@logDate,@logOutDate,@logOutTime,@computer) go