使用 MySQL 和 C# ASPNET 创建和调用存储过程
我想使用 OdbcCommand 类在 MySql 中创建存储过程。
命名存储过程后,我为存储过程中的每个参数定义一个 OdbcCommand
参数。
IN 参数
使用参数名称和包含该值的对象进行定义,OUT 参数
使用参数名称和预期返回的数据类型进行定义。
所有参数都需要定义参数方向。
以下 C# 代码是我的测试。
SP 创建正确,但我有错误
错误 [42000] [MySQL][ODBC 5.1 驱动程序][mysqld-5.1.51-community] 你 SQL 语法有错误;查看对应的手册 到您的 MySQL 服务器版本以获取在附近使用的正确语法 第 1 行的“add_emp”
关于 C# 代码的这一部分
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "add_emp;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tname", "Jones");
cmd.Parameters["@tname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@empno", OdbcType.Int);
cmd.Parameters["@empno"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery(); <<< Line of error
Response.Write("Employee exists: " + cmd.Parameters["@empno"].Value);
}
catch (Exception ex)
{
throw ex;
}
有什么建议吗?
using (OdbcConnection conn =
new OdbcConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
{
OdbcCommand cmd = new OdbcCommand();
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "DROP PROCEDURE IF EXISTS add_emp";
cmd.ExecuteNonQuery();
cmd.CommandText = "CREATE PROCEDURE add_emp(" +
"IN tname VARCHAR(255), OUT empno INT)" +
"BEGIN SELECT EXISTS( SELECT empo FROM do_table WHERE name = tname ) INTO @titem_id; " +
"SET empno = @titem_id; END";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
conn.Close();
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "add_emp;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tname", "Jones");
cmd.Parameters["@tname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@empno", OdbcType.Int);
cmd.Parameters["@empno"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
Response.Write("Employee exists: " + cmd.Parameters["@empno"].Value);
}
catch (Exception ex)
{
throw ex;
}
conn.Close();
}
I want creating stored procedures in MySql using the OdbcCommand
class.
After the stored procedure is named, I define one OdbcCommand
parameter for every parameter in the stored procedure.
IN parameters
are defined with the parameter name and the object containing the value, OUT parameters
are defined with the parameter name and the data type that is expected to be returned.
All parameters need the parameter direction defined.
The following C# code it's my test.
The SP it's created correctly but I have error on
ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.51-community] You
have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'add_emp' at line 1
On this part of C# code
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "add_emp;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tname", "Jones");
cmd.Parameters["@tname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@empno", OdbcType.Int);
cmd.Parameters["@empno"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery(); <<< Line of error
Response.Write("Employee exists: " + cmd.Parameters["@empno"].Value);
}
catch (Exception ex)
{
throw ex;
}
Any suggestion?
using (OdbcConnection conn =
new OdbcConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
{
OdbcCommand cmd = new OdbcCommand();
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "DROP PROCEDURE IF EXISTS add_emp";
cmd.ExecuteNonQuery();
cmd.CommandText = "CREATE PROCEDURE add_emp(" +
"IN tname VARCHAR(255), OUT empno INT)" +
"BEGIN SELECT EXISTS( SELECT empo FROM do_table WHERE name = tname ) INTO @titem_id; " +
"SET empno = @titem_id; END";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
conn.Close();
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "add_emp;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tname", "Jones");
cmd.Parameters["@tname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@empno", OdbcType.Int);
cmd.Parameters["@empno"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
Response.Write("Employee exists: " + cmd.Parameters["@empno"].Value);
}
catch (Exception ex)
{
throw ex;
}
conn.Close();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论