2011-02-22 12 views
2

からのMySQLのクエリを実行し、なぜ文句を言わない、このコマンドが正常に実行します。asp.net

using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '@1', url = '@2' WHERE company = '@3'; ", myConn)) 
    { 
     myCommand.Parameters.AddWithValue("@1", email); 
     myCommand.Parameters.AddWithValue("@2", url); 
     myCommand.Parameters.AddWithValue("@3", company); 
     myConn.Open(); 
     myCommand.ExecuteNonQuery(); 
    } 

しかし、私はそれが動作する実際の値に3 @に置き換えたとき:

using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '@1', url = '@2' WHERE company = 'MyCompany'; ", myConn)) 
{ 
    myCommand.Parameters.AddWithValue("@1", email); 
    myCommand.Parameters.AddWithValue("@2", url); 

    myConn.Open(); 
    myCommand.ExecuteNonQuery(); 
} 

値がために渡されているが会社の変数は、2番目の例でハードコードされている値と同じです。私は会社の変数がパラメータとして追加されていること、そしてそれが私が期待している値であることを確認するためにデバッガを踏みとどめました。すなわち、空白とトリムなし()

私は間違って何をやっているの?

更新: "?" 私はMySQLが使用するコマンドのためにと考えてい

また、これは動作しますが、その後、私はSQLインジェクションを心配する必要は...

string myQuery = string.Format("Update jobs SET poster_email = '{0}', url = '{1}' WHERE company = '{2}'; ", email, url, company); 

    using (MySqlCommand myCommand = new MySqlCommand(myQuery, myConn)) 
    { 
     myConn.Open(); 
     myCommand.ExecuteNonQuery(); 
    } 

答えて

1

代わりに "@" の:

using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '?1', url = '?2' WHERE company = '?3'; ", myConn)) 
{ 
    myCommand.Parameters.AddWithValue("?1", email); 
    myCommand.Parameters.AddWithValue("?2", url); 
    myCommand.Parameters.AddWithValue("?3", company); 
    myConn.Open(); 
    myCommand.ExecuteNonQuery(); 
} 

http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html#connector-net-examples-mysqlcommand-parameters

+0

私はそれが何の違いを作っていない、それを試して与えました... – Pedro