使用VB.NET执行存储过程(更新表)

时间:2014-02-23 21:59:37

标签: sql sql-server vb.net stored-procedures

我的SQL Server存储过程是

ALTER PROCEDURE [dbo].[usp_updateBInfo]
   @WhatTheyDo nVARCHAR(max), 
   @WhereTheyDo nVARCHAR(max), 
   @ID varchar
AS
begin
    update tblBInfo
    set 
       WhatTheyDo = @WhatTheyDo,
       WhereTheyDo = @WhereTheyDo
    where 
       ID = @ID
end

我的VB代码是

  Dim SQLCONN As New SqlConnection
  SQLCONN = New SqlConnection("Data Source=xxxxxx;Initial Catalog=xxxxx;Integrated Security=True")

  Dim SQLCMD As New SqlCommand("usp_updateBInfo", SQLCONN)

  SQLCMD.CommandType = CommandType.StoredProcedure
  SQLCMD.Parameters.Add("@ID", SqlDbType.VarChar).Value = "1C485D2C-F34D-45CE-8694-C74445DD108D"
  SQLCMD.Parameters.AddWithValue("@WhatTheyDo", "abcdefg")
  SQLCMD.Parameters.Add("@WhereTheyDo", SqlDbType.NVarChar).Value = "abcdefg"

  SQLCMD.Connection.Open()
  SQLCMD.ExecuteNonQuery()

  SQLCMD.Connection.Close()

当我点击“更新”按钮时,没有发生任何变化,abcdefg没有传递到whattheydo或主键1C485D2C-F34D-45CE-8694-C74445DD108D

的地方

我可以问我的代码出了什么问题吗?我很确定按钮是否与VB代码相关联。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:4)

您没有设置参数@ID的大小,这意味着只有一个char被传递给存储过程,当然,没有记录可以更新

在T-SQL中,如果你定义一个没有大小的参数NVARCHAR并为其分配一个字符串,就不像在VB.NET中声明然后分配一个字符串。该字符串不会自动扩展为字符串的大小。

要解决此问题,请将存储过程更改为此类

ALTER PROCEDURE [dbo].[usp_updateBInfo]
@WhatTheyDo nVARCHAR(max), @WhereTheyDo nVARCHAR(max), @ID nvarchar(30)
AS
   ....

或您定义字段ID的任何大小(并使用正确的类型nvarchar / varchar)