Sql 使用VB.NET执行存储过程(更新表)
我的SQL Server存储过程是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
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)