2013-05-04 25 views
1

我正在開發(將應用程序數據庫從MS SQL轉換爲MySQL)使用C#.Net和MySQL的應用程序。我的C#代碼和存儲過程在MS SQL中工作得很完美,但是當試圖與MySQL一起獲取參數錯誤時。我的C#代碼是下面和MySQL存儲過程(用CALL重點工作和參數編輯器測試)MySQL和C#.Net存儲過程和多個參數

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#中的調試模式中檢查了參數是否正確,並且可以在命令對象中看到兩個參數。接下來它試圖填充適配器,因此這個命令對象從Connector傳遞到MySQL,並且缺少參數。我試圖通過創建第三行添加相同的第一個參數,然後gettinng錯誤,相同的參數已經存在。 從這個測試中,我確定它是純粹的MySQL或MySQL連接器錯誤。 我不知道如何在這樣的數據庫中有這麼多人使用mysql這個bug。 謝謝 蘇曼

+0

存儲過程的原型在哪裏?錯誤消息聲稱提供的參數數量不正確;我們應該如何幫助喲而不知道正確的調用模式? – 2013-05-04 21:31:38

+0

您好我已經用mysql代碼更新了我的帖子。 – 2013-05-04 21:53:17

回答

1

這是我的SQL的一個BUG,我從MySQL團隊收到了解決方案。我已經在我的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  
.... 

默認字符在服務器設置爲UTF-8,相當於 國家根據文件。

你可以在這裏查看更多信息:

http://dev.mysql.com/doc/refman/5.5/en/charset-national.html 

請讓我知道,如果解決辦法爲你工作。

0

我想你可能需要改變你調用存儲過程的方式。 看一看這個例子http://forums.asp.net/t/988462.aspx

+0

我已經改變了我的代碼,但同樣的錯誤。我的參數更改代碼行如下: cmd.Parameters.Add(new MySqlParameter(「@ v_emailId」,email)); cmd.Parameters.Add(new MySqlParameter(「@ v_password」,pass)); – 2013-05-04 22:31:23

+0

你如何調用存儲過程? – TheLukeMcCarthy 2013-05-04 22:44:17

+0

像下面的代碼(完整的代碼不適合在這裏) MySqlConnection cnn; MySqlCommand cmd; ********** DataTable dt = new DataTable(); cmd = new MySqlCommand(「UserIdValidation」); cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = cnn; MySqlParameter pramEmail = new MySqlParameter(「?v_emailId」,email); pramEmail.Direction = ParameterDirection.Input; cmd.Parameters.Add(pramEmail); //下一個參數類似只是不同的名稱 MySqlParameter pramPassword = new MySqlParameter(「?v_password」,pass); MySqlDataAdapter adap = new MySqlDataAdapter(cmd); adap.Fill(dt); – 2013-05-04 23:52:44