2011-07-04 123 views
4

哪一個會在執行INSERT語句爲MS-SQL數據庫更好:數據適配器Vs的SQL命令

的Sql DataAdapter的或SQL命令 對象?

哪個會更好,而inserting only one row,而inserting multiple rows

代碼使用的一個簡單的例子:

SQL命令

string query = "insert into Table1(col1,col2,col3) values (@value1,@value2,@value3)"; 
int i; 

SqlCommand cmd = new SqlCommand(query, connection); 
// add parameters... 
cmd.Parameters.Add("@value1",SqlDbType.VarChar).Value=txtBox1.Text; 
cmd.Parameters.Add("@value2",SqlDbType.VarChar).Value=txtBox2.Text; 
cmd.Parameters.Add("@value3",SqlDbType.VarChar).Value=txtBox3.Text; 
cmd.con.open(); 
i = cmd.ExecuteNonQuery(); 
cmd.con.close(); 

SQL數據適配器

DataRow dr = dsTab.Tables["Table1"].NewRow(); 
DataSet dsTab = new DataSet("Table1"); 
SqlDataAdapter adp = new SqlDataAdapter("Select * from Table1", connection); 
adp.Fill(dsTab, "Table1"); 
dr["col1"] = txtBox1.Text; 
dr["col2"] = txtBox5.Text;  
dr["col3"] = "text"; 

dsTab.Tables["Table1"].Rows.Add(dr); 

SqlCommandBuilder projectBuilder = new SqlCommandBuilder(adp); 
DataSet newSet = dsTab.GetChanges(DataRowState.Added); 
adp.Update(newSet, "Table1"); 
+0

你在DataLayer中使用DataSet讀取數據嗎? –

+0

@Yves不,我控制數據庫。 – Jayesh

回答

3

使用DataAdapter更新數據源要容易得多。由於您只需修改DataSet並調用Update,因此更改起來會更容易。

使用DataAdapters與命令之間可能沒有(或非常小的)性能差異。 DataAdapters在內部使用Connection和Command對象並執行命令來執行您告訴他們執行的操作(例如填充和更新),因此它與僅使用Command對象幾乎相同。

1

我建議你將有某種程度的控制你的溝通與數據庫。這意味着抽象一些代碼,並且爲此CommandBuilder自動爲您生成CUD語句。

如果您將該技術與類型化的數據集一起使用,會更好。那麼你有智能感知和編譯時間檢查你所有的列

2

我會使用LinqToSql與數據集單插入和大多數數據庫CRUD請求。它是類型安全的,相對較快的非編譯查詢,如上面的那樣。

如果您有很多要插入的行(1000+),並且您使用的是SQL Server 2008,那麼我將使用SqlBulkCopy。您可以使用DataSet並輸入存儲過程併合併到目標中

對於複雜的查詢,我建議使用dapper與存儲過程結合使用。