MySQL和c#.Net存储过程和多参数

本文关键字:参数 存储过程 Net MySQL | 更新日期: 2023-09-27 18:12:04

我正在开发(将应用程序db从MS SQL转换为MySQL)使用c#的应用程序。Net和MySQL。我的c#代码和存储过程在MS SQL中工作完美,但当试图与MySQL整合时获得参数错误。我的c#代码如下,MySQL存储过程运行完美(使用CALL键工作和参数在编辑器中测试)

 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` PROCEDURE `UserIdValidation`(v_emailId NATIONAL VARCHAR(100),v_password 
NATIONAL VARCHAR(50))
BEGIN
   SELECT UserId ,eMail,BloodGroup
,BloodGroupID,Country AS CountrySlNo ,CountryName ,State ,District
,Location,fName,lName ,DonorType ,LastLogIn ,Validated ,ProfileImage
      ,MaritalStatus ,Sex ,Height ,Weight  ,HealthStatus
      ,MyFileLocation FROM vwUser WHERE eMail = v_emailId AND
   PASSWORD = v_password AND Validated = 'Y';
END$$

执行时异常如下:

PROCEDURE alap.UserIdValidation参数个数不正确;期望2,得到1

你能帮我找出错误吗?

更新:我的MySQL连接器是v6.6.5。我在c#调试模式下检查了参数是否正确,可以在命令对象中看到两个参数。接下来,它试图填充适配器,因此该命令对象从连接器传递到MySQL,并且缺少参数。我试图通过创建第三行来添加相同的第一个参数,然后获得相同参数已经存在的错误。从这个测试中,我确信这纯粹是MySQL或MySQL连接器的错误。

MySQL和c#.Net存储过程和多参数

我不知道这个错误是如何存在于这样的数据库中,那么多人使用mysql。

这是我的SQL的一个BUG,我已经收到了MySQL团队的解决方案。我已经在我的MySQL存储过程中实现了这一变化,并得到了解决方案。MySQL回复如下

嗨Suman,

我已经复制了您描述的问题,并且存在一个解决方案工作得很好,希望它能让你跟上你的迁移到MySql。这里的问题是国家的用法例程的参数定义。如果你想定义a特定的字符集,您可以像这样定义例程:

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

请让我知道这个解决方法是否对你有效。

我认为您可能需要更改调用存储过程的方式。看看这个例子http://forums.asp.net/t/988462.aspx