选项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
答案 0 :(得分:1)
我总是选择选项3:参数化查询 !!
不要同意你的SQL语句 - N E V E R
如果您这样做 - 请参阅what will happen eventually.....
它们对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:使用ORM (对象关系映射器),如Dapper-Dot-Net或Entity Framework,将关系数据转换为用于.NET的好对象(最后忘了搞乱DataRow
和DataColumn
这样的东西)?