有时候咱们须要常常的将数据集(
DataSet)导入到数据库中,但是怎么办呢? 有人就说了,利用Sql语句立刻就能够搞定了,对,sql是能够搞定,可是sql的拼接不能够有差错啊,利用SqlParameter能够减小类型的烦恼,但是若是是不少列,那还不累死你。
一、将
DataSet导入Access中(
OleDbDataAdapter.Update方法 )
OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Jet OLEDB:Engine Type=5");
olecon.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select * from TableName" , olecon);
DataSet newds = new
DataSet();
try
{
OleDbCommandBuilder cmdbld = new OleDbCommandBuilder(oda);
cmdbld.SetAllValues = true;
oda.InsertCommand = cmdbld.GetInsertCommand();
ds.Tables[i].BeginLoadData();
int rowcount = ds.Tables[i].Rows.Count;
for (int n = 0; n < rowcount; n++)
{
ds.Tables[i].Rows[n].SetAdded();
}
ds.Tables[i].EndLoadData();
oda.UpdateBatchSize = 1000;
}
catch
{
}
oda.Update(ds, ds.Tables[i].TableName);
oda.Dispose();
olecon.Close();
olecon.Dispose();
OleDbDataAdapter.Update方法和用Sql拼接插入的效率基本上是同样的,
OleDbDataAdapter.Update
其实也是一条一条的插入更新的。可是他能够提升咱们程序的稳定性。
二、将
DataSet导入到Sql Server中(
SqlBulkCopy方法)
SqlConnection conn = new SqlConnection(sqlConnectString);
conn.Open();
SqlBulkCopy sbc = new SqlBulkCopy(conn);
sbc.DestinationTableName = ds.Tables[i].TableName;
//将数据集合和目标服务器的字段对应
for (int q = 0; q < ds.Tables[i].Columns.Count; q++)
{
sbc.ColumnMappings.Add(ds.Tables[i].Columns[q].ColumnName, ds.Tables[i].Columns[q].ColumnName);
}
try
{
sbc.WriteToServer(ds.Tables[i]);
}
catch //(Exception ex)
{
//throw ex;
continue;
}
finally
{
ds.Dispose();
conn.Close();
sbc.Close();
}
这个是否是也比sql insert也好多了,这个效率要比SQL Insert快多了。