2011-10-19 20 views
-1

選項1:在一個數據庫中插入數據爲什麼我們要去sqlcommandbuilder?

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

我的問題是,我覺得選項1是插入最好的方法。爲什麼我們使用SqlCommandBuilder插入數據? SqlCommandBuilder有什麼用?使用SqlCommandBuilder插入數據的優點?你的建議plz

回答

1

我總是會去選項3:參數化查詢 !!

不要級連在一起你的SQL語句 - NEVER

如果你做的 - 看到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-NetEntity Framework,讓您的關係數據轉化成用於好的對象在.NET中(最後忘了與DataRowDataColumn和這樣的東西亂搞)??

+0

謝謝你marc的回覆... –