8

アプリケーションにtextBoxがあります。これらのtextBoxに入力されたデータは、データベースに挿入されます。commandStringは、文字列型のみを受け入れます。では、どうすれば挿入ステートメントを実装できますか?

string cmdString="INSERT INTO books (name,author,price) VALUES (//what to put in here?)"

値ごとにcmdStringをtextBox.Textと結合する必要がありますか、それともより良い代替手段がありますか?

4

2 に答える 2

28

使用CommandParameter、防止するSQL Injection

// other codes
string cmdString="INSERT INTO books (name,author,price) VALUES (@val1, @va2, @val3)";
using (SqlCommand comm = new SqlCommand())
{
    comm.CommandString = cmdString;
    comm.Parameters.AddWithValue("@val1", txtbox1.Text);
    comm.Parameters.AddWithValue("@val2", txtbox2.Text);
    comm.Parameters.AddWithValue("@val3", txtbox3.Text);
    // other codes.
}

完全なコード:

string cmdString="INSERT INTO books (name,author,price) VALUES (@val1, @va2, @val3)";
string connString = "your connection string";
using (SqlConnection conn = new SqlConnection(connString))
{
    using (SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandString = cmdString;
        comm.Parameters.AddWithValue("@val1", txtbox1.Text);
        comm.Parameters.AddWithValue("@val2", txtbox2.Text);
        comm.Parameters.AddWithValue("@val3", txtbox3.Text);
        try
        {
            conn.Open();
            comm.ExecuteNonQuery();
        }
        Catch(SqlException e)
        {
            // do something with the exception
            // don't hide it
        }
    }
}
于 2012-12-22T07:48:45.943 に答える
1

SQLインジェクションから身を守りたい。文字列からSQLを構築することは、悪い習慣ではないにしても、少なくとも非常に恐ろしいことです。

方法:ASP.NETでのSQLインジェクションからの保護 http://msdn.microsoft.com/en-us/library/ff648339.aspx

SQLを挿入する50の方法 http://www.youtube.com/watch?v=5pSsLnNJIa4

エンティティフレームワーク http://msdn.microsoft.com/en-us/data/ef.aspx

于 2012-12-22T07:53:44.080 に答える