簡便的將DataSet導入到數據庫中

有時候咱們須要常常的將數據集( 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快多了。
相關文章
相關標籤/搜索