cmd.executenonquery在vb.net windows应用程序中返回-1

时间:2011-06-02 05:33:14

标签: vb.net

我只是使用存储过程在sqlserver数据库中插入记录。 在这段代码中,Binddata()是我将gridview与记录捆绑在一起的方法。

这是代码:

Private Sub btnadd_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnadd.Click

    sqlSP = "INSERT_E_CLIENTMASTER_REC"
    strConnection = _
        ConfigurationManager.ConnectionStrings("connectstring").ConnectionString
    Dim conn As New SqlConnection(strConnection)

    conn.Open()

    Dim cmd As New SqlCommand(sqlSP, conn)

    cmd.CommandType = CommandType.StoredProcedure

    cmd.Parameters.Add(
        New SqlParameter("@CLIENTCODE", SqlDbType.VarChar, 100, _
            ParameterDirection.Input, False, 0, 0, "", _
            DataRowVersion.Proposed, txtclientcode.Text))
    'cmd.Parameters.Add( _
    '    New SqlParameter("@CLIENT_WEBXID", SqlDbType.NVarChar, _
    '        Convert.ToString(txtwebxid.Text))) _
    cmd.Parameters.Add( _
        New SqlParameter("@CLIENT_WEBXID", SqlDbType.VarChar, 100, _
            ParameterDirection.Input, False, 0, 0, "", _
            DataRowVersion.Proposed, txtwebxid.Text))

    cmd.Parameters.Add( _
        New SqlParameter("@ToEmail", SqlDbType.VarChar, 100, _
            ParameterDirection.Input, False, 0, 0, "", _
            DataRowVersion.Proposed, txttoemail.Text))

    cmd.Parameters.Add( _
        New SqlParameter("@ClientName", SqlDbType.VarChar, 100, _
        ParameterDirection.Input, _
        False, 0, 0, "", DataRowVersion.Proposed, txtclientname.Text))

    cmd.Parameters.Add(_
        New SqlParameter("@CcEmail", SqlDbType.VarChar, 100, _
        ParameterDirection.Input, False, 0, 0, "", _
        DataRowVersion.Proposed, txtccname.Text))

    Dim i As Int32 = cmd.ExecuteNonQuery()
    If (i < 0) Then
        BindData()
        MsgBox("Record Inserted successfully ", MsgBoxStyle.OkOnly)
        txtclientcode.Text = ""
        txtwebxid.Text = ""
        txttoemail.Text = ""
        txtclientname.Text = ""
        txtccname.Text = ""

    Else
        MsgBox("Record Not Inserted successfully ", MsgBoxStyle.OkOnly)
    End If

End Sub

在这段代码中,cmd.ExecuteNonQuery()返回-1,所以我给出了(i&lt; 0)条件实际上当行受到影响时它应该是正值。

提前致谢。

2 个答案:

答案 0 :(得分:1)

记录是否已保存到数据库中?如果是这样,那是因为存储过程没有返回值。

ExecuteNonQuery()

  

用于UPDATE,INSERT和DELETE   语句,返回值是   受影响的行数   命令。当a上存在触发器时   正在插入或更新的表,   返回值包括数量   受插入或插入影响的行   更新操作和数量   受触发器影响的行或   触发。对于所有其他类型的   语句,返回值为-1。如果   发生回滚,返回值为   也-1。

如果需要从存储过程返回值,请查看此StackOverFlow Question

在旁注 - 请注意使用“USING Block”进行连接

答案 1 :(得分:0)

删除“SET NOCOUNT ON;”行来自你的SProc。

SET NOCOUNT(Transact-SQL): http://msdn.microsoft.com/en-us/library/ms189837.aspx