数据适配器 vs SQL 命令

6

在执行 MS-SQL 数据库的插入语句时,哪个更好:

Sql DataAdapter 还是 SQL Command Object?

它们中哪一个更好,当 仅插入一行 时,以及当 插入多行 时呢?

以下是一个代码使用的简单例子:

SQL Command

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

你在数据访问层中使用DataSets来读取数据吗? - Yves M.
@Yves 不,我对数据库有控制权。 - Jayesh
3个回答

3
使用DataAdapters更新数据源要容易得多。只需修改DataSet并调用Update即可进行更改。
使用DataAdapters和使用Commands之间几乎没有(或者很少)性能差异。DataAdapters内部使用Connection和Command对象,并执行您指定的命令来执行操作(例如Fill和Update),因此与仅使用Command对象基本相同。

2
我会在单个插入和大多数数据库CRUD请求中使用LinqToSql与DataSet。它是类型安全的,对于像上面这样的非复杂查询相对较快。
如果您要插入许多行(1000+),并且您正在使用SQL Server 2008,则应使用SqlBulkCopy。您可以使用自己的DataSet并将其输入存储过程并合并到目标中。
对于复杂的查询,我建议使用dapper与存储过程结合使用。

1

我建议您在与数据库通信时要有一定的控制。这意味着需要抽象出一些代码,而CommandBuilder可以自动生成CUD语句。

如果您将此技术与类型化数据集一起使用,效果会更好。这样您就可以在所有列上获得智能感知和编译时检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接