pal*_*law 4 c# mysql stored-procedures visual-studio-2015
我花了大约 7 个小时试图通过反复试验来解决这个问题。我看到的所有在线示例要么不起作用,要么不适用,或者只显示了我正在寻找的一半。
这是我要的: 1. MYSQL 中使用一个 IN 参数和一个 OUT 参数的简单存储过程的示例。2. 使用 C# 从 Visual Studio 调用 FUNCTIONING 的示例(非常重要,因为有时在线示例不起作用...)。文本调用或存储过程命令类型都可以工作。3. AddWithValue 已被弃用。4. 我很想看到 out 参数实际工作。
如果 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
Run Code Online (Sandbox Code Playgroud)
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我相信代码和图片说的比我以往任何时候都多。
C# DB 层(DB 层conn作为连接字符串):
// Note: this is an instance (myDB in terms of the GUI Object)
using System.Data;
using MySql.Data.MySqlClient;
...
...
public long MultBySeven(long theNum)
{ // Call a Mysql Stored Proc named "multBy7"
// which takes an IN parameter, Out parameter (the names are important. Match them)
// Multiply the IN by 7 and return the product thru the OUT parameter
long lParam = 0;
using (MySqlConnection lconn = new MySqlConnection(connString))
{
lconn.Open();
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = lconn;
cmd.CommandText = "multBy7"; // The name of the Stored Proc
cmd.CommandType = CommandType.StoredProcedure; // It is a Stored Proc
// Two parameters below. An IN and an OUT (myNum and theProduct, respectively)
cmd.Parameters.AddWithValue("@myNum", theNum); // lazy, not specifying ParameterDirection.Input;
cmd.Parameters.AddWithValue("@theProduct", MySqlDbType.Int32);
cmd.Parameters["@theProduct"].Direction = ParameterDirection.Output; // from System.Data
cmd.ExecuteNonQuery(); // let it rip
Object obj = cmd.Parameters["@theProduct"].Value;
lParam = (Int32)obj; // more useful datatype
}
}
return (lParam);
}
Run Code Online (Sandbox Code Playgroud)
C# GUI 测试层:
private void btnTestInOut_Click(object sender, EventArgs e)
{ // This GUI Layer call thru the use of a business object or data layer object (`myDB`)
long localHere = myDB.MultBySeven(11);
}
Run Code Online (Sandbox Code Playgroud)
存储过程(取一个数,乘以 7):
DROP PROCEDURE IF EXISTS multBy7;
DELIMITER $
CREATE PROCEDURE multBy7
( IN myNum INT,
OUT theProduct INT
)
BEGIN
SET theProduct=myNum*7;
END$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
调试视图(阅读:它有效。11x7=77):
MySQL Connector 6.9.9.0/Visual Studio 2015 :

另请参阅5.10.1 使用来自连接器/网络的存储例程,年龄未知。
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |