DataSet是否占用太多空间?

时间:2010-12-02 15:22:22

标签: c# sql-server dataset

如果我想在SQL Server数据库中添加一些信息,我必须通过DataSetDataAdapter来完成吗?

这个想法是,如果我的数据库有1-2百万个条目,考虑到我只想添加一行,DataSet的1-2密码行不会占用我的内存?还有其他选择吗?

2 个答案:

答案 0 :(得分:7)

如果您只插入一行,则无需将任何提取到DataSet / DataAdapter。您添加行,提交更改,并执行相关的INSERT命令。

答案 1 :(得分:2)

您总是可以创建一个普通的旧ADO.NET参数化SqlCommand,其中包含一个简单的SQL INSERT语句,并提供参数,并以这种方式加载数据(无需加载任何内容,无论多少行你已经拥有 - 它会起作用):

string insertStmt = "INSERT INTO dbo.YourTable(col1, col2, ...., colN) " +
   "VALUES(@Value1, @Value2, ...., @ValueN)";

using(SqlConnection _con = new SqlConnection(-your-connection-string-here))
using(SqlCommand _cmdInsert = new SqlCommand(insertStmt, _con))    
{
   // define the parameters for your query
   _cmdInsert.Parameters.Add("@Value1", SqlDbType.Int);
    .......

   // set the values
   _cmdInsert.Parameters["@Value1"].Value = 4711;
   .....

   _con.Open();
   int rowsInserted = _cmdInsert.ExecuteNonQuery();
   _con.Close();
}  

如果您要插入多行,则可以循环播放,例如对象列表,为每个对象设置_cmdInsert的值,并为每一行执行_cmdInsert.ExecuteNonQuery()

当然,如果您使用类似ORM(NHibernate,Linq-to-SQL,Entity Framework)之类的东西,那么这项工作可能会变得非常容易 - 只需将新对象插入您的集合并保存它们 - ORM将处理所有详细的细节(基本上我上面展示的代码并执行它 - 或多或少)。