【问题标题】:mysql stored procedure trying to hand over input parameter using vb.netmysql存储过程试图使用vb.net交出输入参数
【发布时间】:2012-12-19 12:38:06
【问题描述】:

我有一个小型 vb.net 应用程序,试图将输入参数移交给 mysql 服务器上的存储过程。

问题是,该过程可以执行,但它只插入 idorganisation 将 projectno 列留空。

这是我的存储过程:

DELIMITER $$

CREATE DEFINER=`user1`@`%` PROCEDURE `InsertProject`()
BEGIN

DECLARE prno varchar (45); 

INSERT Into project ( idorganisation, projectno) values (( select idorganisation from user where usercol1 = (SELECT SUBSTRING_INDEX(USER(),'@',1))),
@prno);
END

我的 vb.net 代码:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim con As New MySqlConnection(My.Settings.welddocconnectionstring)
    Dim cmd As New MySqlCommand("InsertProject", con)
    cmd.CommandType = CommandType.StoredProcedure

    Dim prno As New MySqlParameter("@prno", MySqlDbType.VarChar, 45)
    prno.Direction = ParameterDirection.Input
    prno.Value = "Test"
    cmd.Parameters.Add(prno)


    Try
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()
    Catch ex As MySql.Data.MySqlClient.MySqlException
        MessageBox.Show(ex.Message)
    Finally
        con.Dispose()
    End Try

End Sub

谢谢你和最好的问候 乔希

【问题讨论】:

    标签: mysql vb.net visual-studio-2012 .net-4.5


    【解决方案1】:
    1. 您需要将prno 定义为存储过程的参数,而不是在其中声明为local variable;我采用在参数名称前加上下划线的惯例,以避免后续表达式中的任何歧义:

      CREATE PROCEDURE InsertProject(IN _prno VARCHAR(45)) ...
      
    2. 您的过程仅包含一条语句,因此您无需将其主体包含在BEGIN ... END 复合语句块中。

    3. prno不是user-defined variable,所以不要在它前面加上@

    4. 您不需要使用子查询来评估SUBSTRING_INDEX()

      WHERE usercol1 = SUBSTRING_INDEX(USER(),'@',1)
      
    5. 您可以在此处使用INSERT ... SELECT

      INSERT INTO project
        (idorganisation, projectno)
      SELECT idorganisation, _prno
      FROM   user
      WHERE  usercol1 = SUBSTRING_INDEX(USER(),'@',1)
      

    因此:

    CREATE DEFINER=`user1`@`%` PROCEDURE InsertProject(IN _prno VARCHAR(45))
      INSERT INTO project
        (idorganisation, projectno)
      SELECT idorganisation, _prno
      FROM   user
      WHERE  usercol1 = SUBSTRING_INDEX(USER(),'@',1)
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2013-01-11
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多