zoukankan      html  css  js  c++  java
  • 简便的将DataSet导入到数据库中

          有时候我们需要经常的将数据集(DataSet)导入到数据库中,可是怎么办呢? 有人就说了,利用Sql语句马上就可以搞定了,对,sql是可以搞定,但是sql的拼接不可以有差错啊,利用SqlParameter可以减少类型的烦恼,可是如果是很多列,那还不累死你。

    1、将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

    其实也是一条一条的插入更新的。但是他可以提高我们程序的稳定性。

    2、将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快多了。

    比较的弱智,大家见笑了。

    说明: 在列名匹配的时候,千万不要加入“[]”这样的字符。容易导致给定的 ColumnName“”与数据源中的任意列均不匹配。

  • 相关阅读:
    前缀和-长度最小的子数组
    找到字符串中所有的字母异位词
    区间列表的交集
    比较含退格的字符串
    [转] ios数组基本用法和排序
    [转] 【iOS基础知识】之判断NSString是否为整数、浮点数
    解决resignFirstResponder或者endEditing无效的办法
    iOS 根据文字字数动态确定Label宽高
    [转] iOS开发-搜索栏UISearchBar和UISearchController
    UIActionSheet的最后一项点击失效
  • 原文地址:https://www.cnblogs.com/stonespawn/p/stonespawn.html
Copyright © 2011-2022 走看看