2011-08-15 6 views
-1

私はC#言語でMySqlを使用しています。 データベースからデータを取得しようとしています。私のハッシュがbaa に等しい場合、私は、私はこれを試してみましたfooの値を取得する必要がありMySqlCommand()。ExecuteReader()。GetString()が機能しない

foo baa 
38737 22222 

: フィールドが同じように編成されている 私のコード(動作しない)

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()コール不足している:あなたは、たとえば、単一の値を返すためにSQLコマンドを変更した場合

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

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

ありがとうございました:) –

3

てみてください

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

その後、 cmd.ExecuteScalar()

を使用することもできます
string res = cmd.ExecuteScalar().ToString(); 
+0

ありがとうございました。 –