0

int以下のように (%d) を使用するようにデータベースに sth を渡したい場合

...string.format("select * from Table where code=%d",100)...

%d合格したいときの代わりに何を使えばdateTimeいいですか?

4

2 に答える 2

7

db パラメータの置換に string.format() を使用しないでください。SQL インジェクションが発生します。SqlCommand には Parameters プロパティがあり、パラメーターをコレクションに追加できます

次のようにパラメーター化されたクエリを使用します。

SqlCommand cmd = new SqlCommand()
cmd.Parameters.AddWithValue("@yourParam",value);

コードで Using ブロックを使用すると、より効率的です。

このような

using(SqlConnection con = new SqlConnection("ConnString"))
using(SqlCommand cmd =  new SqlCommand(con))
{
   // do some stuffs. like add parameters. 
}
于 2012-07-04T10:22:11.680 に答える
0

@Raviの回答に加えて。

SQL インジェクションが可能になるため、SQL クエリをそのように連結することは避けてください。

あなたの場合、ORM ( Entity FrameworkNHibernateDapper ) の使用を検討しますが、 を使用するだけの場合SqlCommand、クエリは次のようになります。

using(var connection = new SqlConnection("your connectionstring goes here"))
{
    using(var command = new SqlCommand("select* from Table where code=@dateTime", 
                                                                             connection))
    {
        command.Parameters.AddWithValue("@dateTime", DateTime.Now);

        var reader = command.ExecuteReader();
    }
}

SQLステートメントの連結に関する問題を示すウィキペディアの例を次に示します。

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

userNameのみを含む場合はどうなり'ますか ?

最終的な SQL ステートメントは次のようになります。

SELECT * FROM users WHERE name = '''

これは正しくなく、エラーがスローされます。これを公開することで、データに非常に有害なことを行うことができます!

于 2012-07-04T10:33:05.153 に答える