-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?你的建议

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-Net实体框架这样的 ORM (对象关系映射器)将您的关系数据转换为在 .NET 中使用的好对象(最后忘记搞乱DataRowDataColumn诸如此类的东西)? ?

于 2011-10-19T08:36:55.587 回答