使用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)