[英]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
谢谢您,最好的问候约施
您需要将prno
定义为存储过程的参数,而不是在其中声明为局部变量 。 为了避免在后续表达式中出现歧义,我采用了在参数名前加下划线的约定:
CREATE PROCEDURE InsertProject(IN _prno VARCHAR(45)) ...
您的过程仅包含一个语句,因此您无需将其主体括在BEGIN ... END
复合语句块中。
prno
不是 用户定义的变量 ,因此请勿在其prno
添加@
。
您不需要使用子查询来评估SUBSTRING_INDEX()
:
WHERE usercol1 = SUBSTRING_INDEX(USER(),'@',1)
您可以在此处使用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.