C# MySQL和C.Net存储过程及多参数
我正在开发将数据库从MS SQL转换为MySQL的应用程序,这是一个使用C.Net和MySQL的应用程序。我的C代码和存储过程在MS SQL中工作得很好,但在试图忘恩负义于MySQL获取参数时出现了错误。我的C代码如下所示,MySQL存储过程在编辑器中使用调用键工作和参数进行了完美的测试C# MySQL和C.Net存储过程及多参数,c#,mysql,C#,Mysql,我正在开发将数据库从MS SQL转换为MySQL的应用程序,这是一个使用C.Net和MySQL的应用程序。我的C代码和存储过程在MS SQL中工作得很好,但在试图忘恩负义于MySQL获取参数时出现了错误。我的C代码如下所示,MySQL存储过程在编辑器中使用调用键工作和参数进行了完美的测试 public DataTable AlapValidateUser(string email, string password,string Type) { DataTable dt
public DataTable AlapValidateUser(string email, string password,string Type)
{
DataTable dt = new DataTable();
cmd = new MySqlCommand("UserIdValidation");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cnn;
string pass = reEncryptpassword(password);
MySqlParameter pramEmail = new MySqlParameter("@v_emailId", email);
pramEmail.Direction = ParameterDirection.Input;
cmd.Parameters.Add(pramEmail);
MySqlParameter pramPassword = new MySqlParameter("@v_password", pass);
pramPassword.Direction = ParameterDirection.Input;
cmd.Parameters.Add(pramPassword);
MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
if (cnn.State != ConnectionState.Open ||
cnn.State == ConnectionState.Broken ||
cnn.State != ConnectionState.Connecting ||
cnn.State != ConnectionState.Executing ||
cnn.State != ConnectionState.Fetching)
cnn.Open();
adap.Fill(dt);
cnn.Close();
return dt;
}
MySQL存储过程如下:
CREATE DEFINER=`root`@`localhost`过程`UserIdValidation`v_emailId NATIONAL VARCHAR100,v_密码
国家瓦查尔50
开始
选择UserId、eMail、BloodGroup
,BloodGroupID,国家名称为CountryNo,CountryName,州,地区
、位置、fName、lName、DonorType、上次登录、已验证、ProfileImage
,MaritalStatus,性别,身高,体重,健康状况
,来自vwUser的MyFileLocation,其中eMail=v_emailId和
PASSWORD=v_PASSWORD和Validated=Y;
结束$$
执行期间异常情况如下:
过程alap.UserIdValidation的参数数量不正确;期望2,得到1
你能帮我找出错误吗
更新:我的MySQL连接器是v.6.6.5。我已经在调试模式下检查了C参数是否正确,并且可以在命令对象中看到这两个参数。接下来,它试图填充适配器,因此这个命令对象将从连接器传递到MySQL,并且缺少参数。我试图通过创建第三行来添加相同的第一个参数,但得到的错误是相同的参数已经存在。
从这个测试中,我确信这纯粹是MySQL或MySQL连接器错误。
我不知道在这么多人使用mysql的数据库中,这个bug是如何存在的。我认为您可能需要更改调用存储过程的方式。
看看这个例子我认为您可能需要更改调用存储过程的方式。
看看这个例子这是我的SQL的一个BUG,我已经从MySQL团队那里得到了解决方案。我已经在MySQL存储过程中实现了这些更改,并获得了解决方案。回复如下 嗨,苏曼 我已经复制了您描述的问题,并且存在一个解决方法 工作非常好,希望它能让你在工作中跟上进度 迁移到MySql。这里的问题是美国国内的使用情况 例程参数的定义。如果要定义 特定字符集您可以这样定义例程:
CREATE DEFINER=`root`@`localhost` PROCEDURE
`UserIdValidation`(v_emailId VARCHAR(100) ***CHARACTER SET utf8***,v_password
VARCHAR(50) CHARACTER SET utf8)
BEGIN
.... rest of code
或者你可以用
CREATE DEFINER=`root`@`localhost` PROCEDURE
`UserIdValidation`(v_emailId VARCHAR(100),v_password VARCHAR(50))
BEGIN
....
服务器中的默认字符集为utf8,相当于
根据文件规定,为国家级
您可以在此处查看更多信息:
http://dev.mysql.com/doc/refman/5.5/en/charset-national.html
请让我知道解决方法是否对您有效
这是我的SQL的一个BUG,我已经从MySQL团队收到了解决方案。我已经在MySQL存储过程中实现了这些更改,并获得了解决方案。回复如下 嗨,苏曼 我已经复制了您描述的问题,并且存在一个解决方法 工作非常好,希望它能让你在工作中跟上进度 迁移到MySql。这里的问题是美国国内的使用情况 例程参数的定义。如果要定义 特定字符集您可以这样定义例程:
CREATE DEFINER=`root`@`localhost` PROCEDURE
`UserIdValidation`(v_emailId VARCHAR(100) ***CHARACTER SET utf8***,v_password
VARCHAR(50) CHARACTER SET utf8)
BEGIN
.... rest of code
或者你可以用
CREATE DEFINER=`root`@`localhost` PROCEDURE
`UserIdValidation`(v_emailId VARCHAR(100),v_password VARCHAR(50))
BEGIN
....
服务器中的默认字符集为utf8,相当于
根据文件规定,为国家级
您可以在此处查看更多信息:
http://dev.mysql.com/doc/refman/5.5/en/charset-national.html
请让我知道解决方法是否对您有效
存储过程的原型在哪里?错误消息声称提供的参数数量不正确;在不知道正确的调用模式的情况下,我们应该如何帮助yo?嗨,我已经用mysql代码更新了我的帖子。存储过程的原型在哪里?错误消息声称提供的参数数量不正确;在不知道正确的调用模式的情况下,我们应该如何帮助yo?嗨,我已经用mysql代码更新了我的帖子。我已经相应地更改了我的代码,但还是出现了相同的错误。我的参数更改代码行如下:cmd.Parameters.AddnewMySqlParameter@v_emailId电子邮件cmd.Parameters.AddnewMySqlParameter@v_password通过您如何调用存储的进程?下面的代码完整代码不能在这里使用;MySqlCommand命令cmd;**********DataTable dt=新的DataTable;cmd=新的MySqlCommandUserIdValidation;cmd.CommandType=CommandType.storedProcess;cmd.Connection=cnn;MySqlParameter pramEmail=新的MySqlParameter?v_emailId,email;pramEmail.Direction=参数Direction.Input;cmd.Parameters.AddpramEmail//下一个参数类似只是不同的名称MySqlParameter pramPassword=新的MySqlParameter?v_密码,pass;MySqlDataAdapter adap=新的MySqlDataAdaptercmd;adap.Filldt;我已经相应地更改了代码,但还是出现了相同的错误。我的参数更改代码行如下:cmd.Parameters.AddnewMySqlParameter@v_emailId电子邮件cmd.Parameters.AddnewMySqlParameter@v_password通过你好吗
ou调用存储的过程代码(如下面的完整代码)不适合这里的MySqlConnection cnn;MySqlCommand命令cmd;**********DataTable dt=新的DataTable;cmd=新的MySqlCommandUserIdValidation;cmd.CommandType=CommandType.storedProcess;cmd.Connection=cnn;MySqlParameter pramEmail=新的MySqlParameter?v_emailId,email;pramEmail.Direction=参数Direction.Input;cmd.Parameters.AddpramEmail//下一个参数类似只是不同的名称MySqlParameter pramPassword=新的MySqlParameter?v_密码,pass;MySqlDataAdapter adap=新的MySqlDataAdaptercmd;adap.Filldt;