注意 ExecuteNonQuery() 返回值 问题

 

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

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

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

我这里调用的是存储过程

 注意 ExecuteNonQuery() 返回值 问题_第1张图片

 

 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


 

你可能感兴趣的:(数据库)