zoukankan      html  css  js  c++  java
  • Access批量操作

      鉴于C#要插5万条记录到Access很慢,在网上找了好久的资料,终于找到了比较有用的信息(转载自Bach)谢谢!

      总结如下:

      1、导出TXT:  select * into [data.txt] in "E:/DATA" "Text;" from TableName

                                                (存放的TXT名)(存放路径)                    (表名)

              注意:这种方式导出的TXT格式与access中的手动导出的格式不一样,会生成一个schema.ini,相当于设置视图里面的数据

          2、导入到新表:SELECT * INTO TableName FR0M [data.txt] IN "E:/data" "Text;"

              注意:导入到新表需要schema.ini,且TXT格式必须是用1中的语句导出的格式一样

       3、表已经存在, 追加导入:INSERT INTO TableName select * from [data.txt] in "E:/data" "Text;" 

          注意:TXT格式必须是用1中的语句导出的格式一样,可以没有schema.ini

           通过以上方法对access的大量数据的操作,速度快,且不卡。

        

      以下是我CAD二次开发时用到上述技术的代码,懒得整理,如有人看不懂,留言我整理一下

      DataTable写入txt

     
    private void DatatableToTxt(System.Data.DataTable dt, string txtPath)
    {
    StringBuilder strB = new StringBuilder();
    
    for(int i=0;i<dt.Columns.Count;i++)
    {
    if(i!=dt.Columns.Count-1)
    strB.AppendFormat("\"{0}\",",dt.Columns[i].ColumnName);
    else
    strB.AppendFormat("\"{0}\"", dt.Columns[i].ColumnName);
    }
    strB.Append("\r\n");
    
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    for (int j = 0; j < dt.Columns.Count; j++)
    {
    if (dt.Columns[j].DataType == typeof(string) && !string.IsNullOrEmpty(dt.Rows[i][j].ToString()))
    {
    if (j != dt.Columns.Count - 1)
    strB.AppendFormat("\"{0}\",", dt.Rows[i][j].ToString());
    else
    strB.AppendFormat("\"{0}\"", dt.Rows[i][j].ToString());
    }
    else
    {
    if (j != dt.Columns.Count - 1)
    strB.AppendFormat("{0},", dt.Rows[i][j].ToString());
    else
    strB.AppendFormat("{0}", dt.Rows[i][j].ToString());
    }
    }
    if(i!=dt.Rows.Count-1)
    strB.Append("\r\n");
    }
    Write(txtPath, strB.ToString());
    }
    View Code

      新建TXT

            public void Write(string path,string text)
            {
                if (File.Exists(path))
                    File.Delete(path);
                FileStream fs = new FileStream(path, FileMode.Create);
                StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.Default);
                //开始写入
                sw.Write(text);
                //清空缓冲区
                sw.Flush();
                //关闭流
                sw.Close();
                fs.Close();
            }
    View Code

      调用

      DatatableToTxt(dt_new, @"D:\Data.txt");
                string strinsert = "INSERT INTO GX_PS_WSP select * from [Data.txt] in \"D:/\" \"Text;\" ";
                ExecuteSql(strinsert, constr);
    View Code
  • 相关阅读:
    lea
    DIV指令
    html基础
    浮点计算结果误差,以及解决方法
    java的threadLocal类
    java多线程基础总结
    sql反模式读书笔记 (持续更新)
    pdb 调试初步
    面向对象设计原则与总结 (持续更新)
    @servcie注解基本用法
  • 原文地址:https://www.cnblogs.com/baofengyu/p/5973614.html
Copyright © 2011-2022 走看看