我已经花了大约7个小时通过试错来弄清楚这个问题。我看到的所有在线示例都不起作用,或者不适用,或者只显示我正在寻找的一半。
以下是我的要求: 1. MYSQL中一个使用一个IN参数和一个OUT参数的简单存储过程示例。 2. Visual Studio中一个运行良好的(非常重要,因为在线示例有时无法工作...)使用C#的调用示例。可以是文本调用或存储过程命令类型。 3. AddWithValue已被弃用。 4. 我很想看到输出参数确实有效。
如果在MYSQL和Visual Studio中无法实现,那么也请告知。
MYSQL文档对此特定示例不够详细。请不要讨论Visual Studio或C#的缺点。
先提前感谢您!:)
编辑:
这是我目前已经完成的,但它不起作用!!!
MYSQL方面,使用HeidiSQL:
CREATE DEFINER=`root`@`localhost` PROCEDURE `login`(IN `stuff` VARCHAR(50), IN `pass` VARCHAR(50), OUT `param3` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
set param3 = 0;
set param3 = (select count(*) from users where username=stuff and userpassword=pass);
select @param3;
END
在 C# 方面,我尝试获取这个 OUT 参数。经过多次迭代后,我剖析了该函数曾经具有的功能,将其简化为两个问题:1. OUT 参数无法正常工作,2. 尽管 Visual Studio 传递了 IN 参数,但 SQL 拒绝识别它们。
protected void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
using (MySqlConnection con = new MySqlConnection(strcon))
{
con.Open();
MySqlCommand com = new MySqlCommand("CALL login(@stuff, @pass, @param3);", con);
com.CommandType = CommandType.Text;
com.Parameters.Add("@stuff", MySqlDbType.VarChar);
com.Parameters["@stuff"].Value = Login.UserName;
com.Parameters.Add("@pass", MySqlDbType.VarChar);
com.Parameters["@pass"].Value = Login.Password;
try
{
obj = com.ExecuteScalar();
objparam = com.Parameters["param3"].Value;
if (Convert.ToInt32(obj) != 0)
{
Response.Redirect("Welcome.aspx");
}
else
{
Login.PasswordRequiredErrorMessage = "invalid user name and password";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
con.Close();
}
}
OUT
参数的功能。我不知道是多久之前,所以我目前正在使用最新的连接器版本6.9.9.0。 - Drew