使用VB.NET(更新表)
问题描述:
我的SQL Server存储过程是使用VB.NET(更新表)
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
没有传递到whattheyd或whereTheo与主键1C485D2C-F34D-45CE-8694-C74445DD108D
我可以问我的代码错在哪里?我很确定这个按钮是连接到VB代码的。
感谢您的任何建议!
答
您没有设置参数@ID
的大小,这意味着只有一个字符传递给存储过程,当然,没有记录会被发现更新
在T-SQL ,如果你定义了一个没有大小的参数NVARCHAR并为它分配一个字符串,就不像在VB.NET中声明并分配一个字符串。该字符串不会自动扩展为任何字符串的大小。
要解决的问题改变你的存储过程,像您所定义的字段ID此
ALTER PROCEDURE [dbo].[usp_updateBInfo]
@WhatTheyDo nVARCHAR(max), @WhereTheyDo nVARCHAR(max), @ID nvarchar(30)
AS
....
或任何大小(并使用正确的类型为nvarchar/VARCHAR)