数据适配器与Sql命令

时间:2011-07-04 08:24:51

标签: c# asp.net sql sqlcommand sqldataadapter

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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