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
原文地址:https://www.cnblogs.com/baofengyu/p/5973614.html