繁体   English   中英

mysql存储过程试图使用vb.net交出输入参数

[英]mysql stored procedure trying to hand over input parameter using vb.net

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

问题是,可以执行该过程,但是只插入idorganize,而使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

谢谢您,最好的问候约施

  1. 您需要将prno定义为存储过程的参数,而不是在其中声明为局部变量 为了避免在后续表达式中出现歧义,我采用了在参数名前加下划线的约定:

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

  3. prno 不是 用户定义的变量 ,因此请勿在其prno添加@

  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)
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM