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

Sql 使用VB.NET执行存储过程(更新表),sql,sql-server,vb.net,stored-procedures,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

我的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
不会传递给主键为
1C485D2C-F34D-45CE-8694-C74445DD108D的whattheydo或where theydo

请问我的密码哪里出了问题?我很确定这个按钮是链接到VB代码的


谢谢你的建议

您不设置参数
@ID
的大小,这意味着只向存储过程传递一个字符,当然,不会找到要更新的记录

在T-SQL中,如果定义一个没有大小的参数NVARCHAR并为其分配一个字符串,这与在VB.NET中声明并分配一个字符串不同。字符串不会自动扩展到字符串的任何大小

要更正此问题,请将存储过程更改为以下内容

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

或者,无论您定义了字段ID的大小(并且使用了正确的类型nvarchar/varchar)

您没有设置参数
@ID
的大小,这意味着只向存储过程传递一个字符,当然,不会找到要更新的记录

在T-SQL中,如果定义一个没有大小的参数NVARCHAR并为其分配一个字符串,这与在VB.NET中声明并分配一个字符串不同。字符串不会自动扩展到字符串的任何大小

要更正此问题,请将存储过程更改为以下内容

ALTER PROCEDURE [dbo].[usp_updateBInfo]
@WhatTheyDo nVARCHAR(max), @WhereTheyDo nVARCHAR(max), @ID nvarchar(30)
AS
   ....
或者定义字段ID的大小(并使用正确的类型nvarchar/varchar)