【问题标题】:Execute a stored procedure using VB.NET使用 VB.NET 执行存储过程
【发布时间】:2011-12-29 04:17:07
【问题描述】:

这是我的程序

ALTER PROCEDURE sp_addUser
     @UserName nvarchar(50),    
     @Prenom nvarchar(50),  
     @Nom nvarchar(50), 
     @Mail nvarchar(50),    
     @Password char(8), 
     @Addresse nvarchar(100),   
     @Ville nvarchar(50),   
     @Province nvarchar(50),    
     @PostalCode char(6),
     @Pays nvarchar(50),    
     @AnimalGenre nvarchar(50), 
     @NomAnimal nvarchar(50),   
     @Race nvarchar(50) 
AS
BEGIN
   INSERT INTO Client
   VALUES (@UserName,@Prenom,@Nom,@Mail,@Password,@Addresse,@Ville,@Province,@PostalCode,@Pays,@AnimalGenre,@NomAnimal,@Race);
END 

我认为这对于存储过程来说还可以

现在是在数据库中添加值的代码

Sub sp_addUser()

    Dim intRowsAff As Integer

    lblErrMsg.Text = ""
    lblRecsAff.Text = ""

    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("BecsEtMuseauxSQL").ConnectionString
    Dim con As SqlConnection = New SqlConnection(connectionString)

    Dim cmd As New SqlCommand("sp_addUser", con)

    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = txtUserName.Text
    cmd.Parameters.Add("@Prenom", SqlDbType.VarChar, 50).Value = txtPrenom.Text
    cmd.Parameters.Add("@Nom", SqlDbType.NVarChar, 50).Value = txtNom.Text
    cmd.Parameters.Add("@Mail", SqlDbType.NVarChar, 50).Value = txtMail.Text
    cmd.Parameters.Add("@Password", SqlDbType.Char, 8).Value = txtPass.Text
    cmd.Parameters.Add("@Addresse", SqlDbType.NVarChar, 100).Value = txtAdresse.Text
    cmd.Parameters.Add("@Ville", SqlDbType.NVarChar, 50).Value = txtVille.Text
    cmd.Parameters.Add("@Province", SqlDbType.NVarChar, 50).Value = txtProvince.Text
    cmd.Parameters.Add("@PostalCode", SqlDbType.Char, 6).Value = txtPostal.Text
    cmd.Parameters.Add("@Pays", SqlDbType.NVarChar, 50).Value = txtPays.Text
    cmd.Parameters.Add("@AnimalGenre", SqlDbType.NVarChar, 50).Value = rblAnimal.Text
    cmd.Parameters.Add("@NomAnimal", SqlDbType.NVarChar, 50).Value = txtAnimal.Text
    cmd.Parameters.Add("@Race", SqlDbType.NVarChar, 50).Value = txtRace.Text

    Try
        cmd.Connection.Open()
        intRowsAff = cmd.ExecuteNonQuery()
    Catch ex As Exception
        lblErrMsg.Text = ex.Message & ex.Source
    End Try
    lblRecsAff.Text = intRowsAff & " record(s) inserted"
    cmd.Connection.Close()
End Sub

在我执行方法后 VS 说我必须为过程 sp_addUser 指定很多参数

我不明白为什么会产生错误!

【问题讨论】:

  • 您还记得更新数据库中的存储过程定义吗?
  • 更新存储过程定义是什么意思??
  • 我将我的 SP 重命名为 spAddUser 并重新启动 VS,现在可以正常工作了谢谢
  • 绝对需要将其作为存储过程。回到我们没有参数化查询的那一天,是的,但今天它只是一种浪费。它在创建和维护一些没有用处的东西上花费了大量时间。
  • @Dan-o,它与回答 OP 问题无关,而且可以说恰恰相反。我没有在我的代码中添加内联 SQL,因为如果需要更改数据,我可以轻松更新存储过程并完成工作。

标签: vb.net tsql stored-procedures ado.net sql-insert


【解决方案1】:

只需将您的 Sp 与方法背后的代码同步并将参数设置为 sp。

Dim dt As New DataTable
    Dim sqlpr1 As New List(Of SqlParameter)

    Dim cmd As New SqlCommand()

    cmd.CommandType = CommandType.StoredProcedure
    cmd.CommandText = "[sp_ItemPackingList]"
    cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = dateDate.Text.Trim()
    cmd.Parameters.Add("@Thk", SqlDbType.VarChar).Value = txtPendQty.Text.Trim()
    cmd.Parameters.Add("@Dia", SqlDbType.VarChar).Value = txtPendQty.Text.Trim()
    Try
        cmd.ExecuteNonQuery()
        lblMessage.Text = "Record inserted successfully"
    Catch ex As Exception
        Throw ex
        obj.GetDataTable("[sp_ItemPackingList]", sqlpr1)

    End Try

【讨论】:

    【解决方案2】:

    您发布的代码和存储过程似乎是同步的。

    这强烈表明数据库中的存储过程与您对代码的期望不同步。建议您检查您发布的实际上是DB中的存储过程。

    另外注意:你不应该在你的 proc 前加上“sp_”,除非它自然地驻留在 master 中。

    【讨论】:

    • 我将我的 SP 重命名为 spAddUser 并重新启动 VS,现在可以正常工作了谢谢
    【解决方案3】:
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    Try
       With con
           .ConnectionString = sqlConnectionString
           .Open()
       End With
       With cmd
           .CommandText = "UpdateProcedure"
           .CommandType = CommandType.StoredProcedure
           .Parameters.AddWithValue("CName", txtCName.Text)
           .Parameters(0).SqlDbType = SqlDbType.NVarChar
          .Parameters.AddWithValue("CAddress",txtCAddress1.Text)
           .Parameters(1).SqlDbType = SqlDbType.NVarChar
           .Parameters.AddWithValue("CCity", txtCCity)
           .Parameters(2).SqlDbType = SqlDbType.NVarChar
           .ExecuteNonSqlQuery()
        End With
    Catch ex As Exception
    
    Finally
      cmd.Dispose()
      con.Close()
    End Try
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多