-1

オプション1:データベースにデータを挿入する

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

cmd.ExecuteNonQuery();

オプション2:

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");

私の質問は、option1が挿入するのに最適な方法だと思います。なぜSqlCommandBuilderデータの挿入に使用するのですか?SqlCommandBuilderの用途は何ですか??を使用してデータを挿入することの利点はありますSqlCommandBuilderか?あなたの提案plz

4

1 に答える 1

2

私はいつもオプション3に行きます:パラメータ化されたクエリ!!

SQLステートメントを連結しないでください-決して

もしそうなら-最終的に起こるか見てください.....

これらは両方ともSQLインジェクション攻撃に対して安全であり、より効率的です(複数のパラメーター値を使用してこれを呼び出すと、単一のクエリプランを再利用できるため)。

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:Dapper-Dot-NetEntity FrameworkなどのORM(オブジェクトリレーショナルマッパー)を使用して、リレーショナルデータを.NETで使用するための優れたオブジェクトに変換します(最後DataRowに、などをいじることを忘れますDataColumn)? ?

于 2011-10-19T08:36:55.587 に答える