读书人

注意 ExecuteNonQuery() 返回值 有关问

发布时间: 2013-03-10 09:38:39 作者: rapoo

注意 ExecuteNonQuery() 返回值 问题

先前做一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 。但是实际上并不是这样的,好在处理的数据操作多时 修改, 插入, 删除,否则的话问题就有点打了,都是些基础的知识,但是很重要个人觉得有必要记下来。

ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话利用try--catch--语句来容错。

例如用ExecuteNonQuery()方法执行create操作

我这里调用的是存储过程

注意 ExecuteNonQuery() 返回值 有关问题

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) ASupdate T_User set statue =@statue where userID =@userIDinsert into T_WorkRecord(userID,logDate,logTime,logOutTime,computer) values (@userID,@logDate,@logOutDate,@logOutTime,@computer)go


读书人网 >软件架构设计

热点推荐