2011-08-15 110 views
-1

我正在使用C#語言的MySql。 我想從我的數據庫中獲取一些數據。 字段進行組織,如:MySqlCommand()。ExecuteReader()。GetString()不起作用

foo baa 
38737 22222 

我需要的foo值,如果我的哈希值等於baa 我嘗試這樣做: 我的代碼(不工作)

MySqlConnection con = new MySqlConnection("Server=localhost;Database=test;Uid=user;Pwd=pass;"); 
con.Open(); 
MySqlCommand cmd = new MySqlCommand(); 
cmd.CommandText = string.Format("SELECT * FROM info WHERE baa = '{0}'", Hash); ; 
cmd.Connection = con; 
MySqlDataReader reader = cmd.ExecuteReader(); 
String res = reader.GetString(0); 

我得到以下錯誤:

Invalid attempt to access a field before calling Read() 

有人能指出我的錯誤嗎? 在此先感謝。

+1

還應該指出,這種方法暴露給你SQL注入攻擊。關於這個看到小小的桌子。 – Tejs

+0

散列不是用戶輸入 –

回答

10

你缺少一個reader.Read()電話:

MySqlDataReader reader = cmd.ExecuteReader(); 
while(reader.Read()) 
{ 
    String res = reader.GetString(0); 
    //... 
} 
+0

感謝您的幫助:) –

3

嘗試:

string res; 
using(MySqlDataReader reader = cmd.ExecuteReader()) 
{ 
    if(reader.Read()) 
     res = reader.GetString(0); 
    else 
     res = "not found"; 
} 

如果更改SQL命令返回一個值,例如:

"SELECT foo FROM info WHERE baa = '{0}' LIMIT 1" 

然後您還可以使用cmd.ExecuteScalar()

string res = cmd.ExecuteScalar().ToString(); 
+0

也感謝您的幫助:) –