【问题标题】:Execute a stored procedure using VB.NET (update table)使用 VB.NET 执行存储过程(更新表)
【发布时间】:2014-02-23 21:59:37
【问题描述】:

我的 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 或 wheretheydo

请问我的代码哪里出错了?我很确定该按钮已链接到 VB 代码。

感谢您的任何建议!

【问题讨论】:

    标签: sql sql-server vb.net stored-procedures


    【解决方案1】:

    你不设置参数@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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多