2013-01-03 67 views
-1

從MySQL中的表中讀取值時出現問題,是索引值,無論如何我都無法讀取值。我得到的是0的初始化值我沒有得到任何錯誤,因爲它返回0,如果我在數據庫中運行查詢,它會得到正確的值。我試圖使用executeScalar(),但結果相同。從mysql讀取int的C#

 MySqlConnection conn = new MySqlConnection(MyConString); 
    ulong ukey=0; 
      try 
      { 
       string sql_users2 = "SELECT `key` FROM `permuser` WHERE `user` = '" + myuser + "' AND `code` = '" + mycode + "'"; 
       MySqlCommand cmdSel2 = new MySqlCommand(sql_users2, conn); 
       conn.Open(); 
       MySqlDataReader dr2 = cmdSel2.ExecuteReader(); 
       dr2.Read(); 

        ukey = dr2.GetUInt64(dr2.GetOrdinal("key")); 
        // MessageBox.Show("Sorry " + myuser + " already have access to " + mycode + ",\nIf this is an extension, search for the user which key is " + ukey + " and edit the end date.", "Duplicate User Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); 

       dr2.Close(); 
       dr2.Dispose(); 
      } 
      catch (MySqlException ex) //catch 2 
      { 

       MessageBox.Show("catch ukey\nCan't connect to database\n" + ex.ToString()); 
      } 

      conn.Close(); 
      conn.Dispose();  
+2

什麼是錯誤?你從讀者那裏得到什麼價值? – David

+1

定義「不能讀取數值」:返回什麼?有什麼錯誤?你可以附加一個真實的例子(即「如果數據是這樣的,代碼應該返回一個蘋果,而是返回一個香蕉」)? – Alex

+4

我假設你已經使用了調試器,結果是什麼?順便說一句,使用[參數](http://www.devart.com/dotconnect/mysql/docs/Devart.Data.MySql~Devart.Data.MySql.MySqlParameter.html)! –

回答

0

的方法是很多人只是:

ukey = (uint)dr2[0]; 
1

您正在返回從查詢單個值,所以你可以直接使用ExecuteScalar代替的ExecuteReader。 (指向SqlServer的描述的鏈接點,但對於MySql它是相同的)

一個不容忽視的重要問題是使用參數而不是字符串連接。
如果您的myusermycode變量包含單引號,會發生什麼情況?你得到錯誤的結果或語法錯誤。 當然,主要問題是Sql Injection attack永遠不要低估。

using(MySqlConnection conn = new MySqlConnection(MyConString)) 
{ 
    ulong ukey=0; 
    try 
    { 
     string sql_users2 = "SELECT `key` FROM `permuser` WHERE `user` = @usr AND `code` = @code"; 
     MySqlCommand cmdSel2 = new MySqlCommand(sql_users2, conn); 
     conn.Open(); 
     cmdSel2.Parameters.AddWithValue("@usr", myuser); 
     cmdSel2.Parameters.AddWithValue("@code", mycode); 

     object result = cmdSel2.ExecuteScalar(); 
     if(result != null) 
      ukey = Convert.ToUInt64(result); 


    } 
    catch (MySqlException ex) //catch 2 
    { 
     MessageBox.Show("catch ukey\nCan't connect to database\n" + ex.ToString()); 
    } 
} 

另外我對你使用UInt64有點困惑。 key列中存儲了哪種數據類型?

+0

關於UInt64,我也是因爲它沒有任何意義,但有人告訴我嘗試過,有時你會嘗試任何事情,無論它是什麼...... –

+0

那麼,但是什麼樣的數據類型是列'key'?轉換可能會失敗或者只是給出錯誤的結果。 – Steve

+0

是一個auto_increment int –