我的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代码相关联。
感谢您的任何建议!
答案 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)