Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL和C.Net存储过程及多参数_C#_Mysql - Fatal编程技术网

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

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

我正在开发将数据库从MS SQL转换为MySQL的应用程序,这是一个使用C.Net和MySQL的应用程序。我的C代码和存储过程在MS SQL中工作得很好,但在试图忘恩负义于MySQL获取参数时出现了错误。我的C代码如下所示,MySQL存储过程在编辑器中使用调用键工作和参数进行了完美的测试

 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;