2015-04-23 75 views
2

我有一個應用程序連接並在數據庫中做一些事情,所以我需要在表中找到一個序列號並返回它,我這樣做,但我有一個問題:用字符串值選擇返回

public int Select_Begin(string serial) 
{ 
    string query = "SELECT serial FROM `compteur_mono` WHERE serial = " + serial + ";"; 
    //Open connection 
    MySqlCommand cmd = new MySqlCommand(query, connection); 
    if (this.OpenConnection() == true) 
    { 
     int numero = cmd.ExecuteNonQuery(); 
     return numero; 
    } 
    else 
    { 
     return 0; 
    } 
} 

當我執行的結果是-1總是但是,當我這樣做:

public string Select_Begin(string serial) 
{ 
    string query = "SELECT serial FROM `compteur_mono` WHERE serial = " + serial + ";"; 
    //Open connection 
    MySqlCommand cmd = new MySqlCommand(query, connection); 
    if (this.OpenConnection() == true) 
    { 
     string serial = cmd.ExecuteNonQuery(); 
     return serial; 
    } 
    else 
    { 
     return null; 
    } 
} 

此錯誤出現錯誤:1無法隱式轉換類型「詮釋」到「字符串」

一些幫助請,我不會使用一個DataReader,因爲我只有一個串口返回它:* 感謝

+0

不要使用一個全球性的連接,它通常最好加上'using'語句來創建在你使用它的方法連接,最好確保它正確關閉。你不必擔心效率不高。連接池(默認)則相反。 –

+2

我的串口可以'x'; DROP TABLE compteur_mono; - '? – spender

+2

即使不是今天,也許明天如果開發人員2認爲該方法是有用的。所以不要連接字符串,但使用sql參數。 –

回答

8

ExecuteNonQuery不希望查詢SELECT serial是查詢。將其更改爲ExecuteScalar,全部都可以使用。您應該添加一些using聲明並在可能的情況下進行參數化,注意。

const string query = 
    "SELECT serial FROM `compteur_mono` WHERE serial = @serial;"; 

using(var cmd = new MySqlCommand(query, connection)) 
{ 
    cmd.Parameters.AddWithValue("@serial", serial); 
    if (this.OpenConnection()) 
    { 
     return (string)cmd.ExecuteScalar(); 
    } 
    return null; 
} 

或「短小精悍」:

return connection.Query<string>(
    "SELECT serial FROM `compteur_mono` WHERE serial = @serial;", 
    new { serial }).SingleOrDefault(); 
+0

Hi Marc,謝謝你的回答我在executeScalar上有錯誤() 錯誤不能隱式轉換類型'對象'改爲'字符串'。存在明確的轉換(你是否缺少演員?) – user3645814

+0

@ user3645814如果你在上面看,我在38分鐘前編輯了那個演員 –

+0

嗨先生marc,謝謝你, – user3645814