2011-10-19 9 views
-1

オプション1:DBにデータを挿入するなぜsqlcommandbuilderを使用しますか?

SqlCommand cmd = new SqlCommand("INSERT INTO table_name(eid,eName,Dept) values('"+ textBox1.Text +"','"+ textBox2.Text +"','"+ Textbox3.Text +"'", con); 

cmd.ExecuteNonQuery(); 

オプション2:私たちはデータを挿入するSqlCommandBuilderを使用して、なぜ

SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM table_name",con); 

SqlCommandBuilder sqlcomb = new SqlCommandBuilder(sqlda); 

DataSet dset = new DataSet("table1"); 

sqlda.Fill(dset,"table1"); 

DataRow drow = dset.Tables["table1"].NewRow(); 
drow["eid"] = textBox1.Text.ToString(); 
drow["eName"] = textBox2.Text.ToString(); 
drow["Dept"] = textBox3.Text.ToString(); 

dset.Tables["table1"].Rows.Add(drow); 

sqlda.Update(dset, "table1"); 

私の質問は、私はオプション1のように感じ、ですが...挿入するための最善の方法であり、 ? SqlCommandBuilderの使用は何ですか? SqlCommandBuilderを使用してデータを挿入する利点はありますか?あなたの提案plz

答えて

1

私はいつもオプション3:パラメータ化されたクエリのために行くだろう!

が一緒にあなたのSQL文連結していません - あなたがない場合NEVER

を - ので、(彼らは両方のSQLインジェクション攻撃に対して安全で、かつより効率的what will happen eventually.....

を見ます単一のクエリプランは、これを複数のパラメータ値で呼び出すと再利用できます)。

string insertStmt = "INSERT INTO dbo.table_name(eid, eName, Dept) " + 
        "VALUES(@eid, @eName, @dept)"; 

SqlCommand cmd = new SqlCommand(insertStmt, con); 

cmd.Parameters.Add("@eid", SqlDbType.Int).Value = .......; 
cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50).Value = .......; 
cmd.Parameters.Add("@dept", SqlDbType.VarChar, 100).Value = .......; 

cmd.ExecuteNonQuery(); 

それとも、その後オプション4:.NETで使用するための素敵なオブジェクトにリレーショナルデータを取得する(そして最終的にDataRowDataColumnと、そのようなものをいじり忘れてDapper-Dot-NetまたはEntity FrameworkのようなORM(オブジェクト・リレーショナルマッパー)を使用します)??

+0

あなたのご返信ありがとうございます... –

関連する問題