2011-05-04 164 views
1

當前,我使用ASP.NET MVC3和MySQL創建應用程序,當我試圖從數據庫中檢索用戶的名字時,我收到一個System.FormatException:輸入字符串的格式不正確。MySQL System.FormatException:輸入字符串格式不正確

這是我的代碼:

public string GetUserFirstName(UInt64 id) 
{ 
    DBConnections databaseCnnString = new DBConnections(); 
    string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef"; 
    MySqlConnection cnn = new MySqlConnection(connectionString); 

    try 
    { 
     cnn.Open(); 
     string sp_GetFName = "SP_GET_FNAME"; 
     MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("id", id); 
     cmd.Parameters["id"].Direction = ParameterDirection.Input; 
     cmd.Parameters.AddWithValue("first_name", MySqlDbType.VarChar); 
     cmd.Parameters["first_name"].Direction = ParameterDirection.Output; 

     object result = cmd.ExecuteScalar(); 
     if (result != null) 
     { 
     string fname = Convert.ToString(result); 
     return fname; 
     } 
     else 
     { 
     string fname = "friend"; 
     return fname; 
     } 

    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     cnn.Close(); 
     cnn.Dispose(); 
    } 
} 

這是MySQL的存儲過程:

CREATE DEFINER=`0001`@`%` PROCEDURE `SP_GET_FNAME`(IN id BIGINT(20), OUT first_name VARCHAR(60)) 
BEGIN 
    DECLARE user_id BIGINT(20) DEFAULT id; 
    DECLARE output VARCHAR(60); 
    SELECT `FName` FROM `users` WHERE USERID=user_id INTO output; 
    SET first_name = output; 
END 

這個問題似乎執行cmd.ExecuteScalar時是()。

這是什麼問題?

預先感謝您!

回答

1

複製並粘貼我的錯誤。如預期那樣工作正確的代碼是:

public string GetUserFirstName(UInt64 id) 
{ 
    DBConnections databaseCnnString = new DBConnections(); 
    string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef"; 
    MySqlConnection cnn = new MySqlConnection(connectionString); 

    try 
    { 
     cnn.Open(); 
     string sp_GetFName = "SP_GET_FNAME"; 
     MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("id", id); 
     cmd.Parameters["id"].Direction = ParameterDirection.Input; 
     cmd.Parameters.Add(new MySqlParameter("first_name", MySqlDbType.VarChar)); 
     cmd.Parameters["first_name"].Direction = ParameterDirection.Output; 
     cmd.ExecuteScalar(); 
     string fname = Convert.ToString((cmd.Parameters["first_name"].Value)); 

     return fname; 

    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     cnn.Close(); 
     cnn.Dispose(); 
    } 
} 

更正:cmd.Parameters.Add(新了MySQLParameter( 「FIRST_NAME」,MySqlDbType.VarChar)); NOT:cmd.Parameters.AddWithValue(「first_name」,MySqlDbType.VarChar);

在我的情況下,用戶表中的FNAME字段不能爲NULL;因此,檢查代碼中返回的NULL值是不必要的。

0

我猜測用戶沒有找到或fname爲空。

我真的很希望你不會爲每個用戶列查詢數據庫。

祝你好運。

+0

哈哈...不...用戶在那裏,我不查詢每個用戶列的數據庫。如果我使用Workbench直接執行查詢,它將返回一個單值,這正是我正在尋找的。 – 2011-05-04 22:54:24

0

附加評論。 嘗試返回字符串值時,AddWithValue似乎試圖將字符串的輸出轉換爲數字。這會導致字符串格式異常。

相關問題