数据适配器与Sql命令

哪一个在执行ms-sql数据库的insert语句时会更好:

Sql DataAdapter或SQL命令对象?

哪个更好, inserting only one rowinserting 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"); 

使用DataAdapter更容易更新数据源。 由于您只需修改DataSet并调用Update,因此更容易进行更改。

使用DataAdapter与命令之间的性能可能没有(或很小)差异。 DataAdapter在内部使用Connection和Command对象并执行命令来执行您告诉他们要执行的操作(例如Fill和Update),因此它与仅使用Command对象几乎相同。

我会将LinqToSql与DataSet一起用于单个插入和大多数数据库CRUD请求。 对于非编译查询(例如上面的查询),它是类型安全的,相对较快。

如果您要插入许多行(1000+)并且您使用的是SQL Server 2008,我将使用SqlBulkCopy。 您可以使用DataSet并输入存储过程并合并到目标中

对于复杂的查询,我建议将dapper与存储过程结合使用。

我建议您对数据库的通信有一定的控制权。 这意味着抽象一些代码,为此,CommandBuilder会自动为您生成CUD语句。

如果您将该技术与类型化数据集一起使用,那会更好。 那么你有智能感知和编译时间检查你的所有列