我正在开发(将应用程序数据库从 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 连接器是 v.6.6.5。我在调试模式下检查了 C# 参数是否正确,并且可以在命令对象中看到这两个参数。接下来它试图填充适配器,因此这个命令对象从连接器传递给 MySQL,并且缺少参数。我试图通过创建第三行来添加相同的第一个参数,然后得到相同参数已经存在的错误。从这个测试我确信它纯粹是 MySQL 或 mysql 连接器错误。我不知道这个错误如何存在于这么多人使用 mysql 的数据库中。