zoukankan      html  css  js  c++  java
  • 导入CSV文件到数据库

    闲来没事写了个将CSV文件导入数所库的方法

    先写配置文件

    private void WriteConfigFile(string file)
        {
            
    string colLine = "";
            
    using (StreamReader reader = new StreamReader(file, Encoding.GetEncoding("GB2312")))
            {
                colLine 
    = reader.ReadLine();
            }
            
    if (colLine != null && colLine != "")
            {
                
    string[] cols = colLine.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                
    int index = 0;
                
    string filename = Path.GetFileName(file);
                
    string dir = Path.GetDirectoryName(file);
                
    string configFile = string.Format("{0}\\Schema.ini", dir);
                StringBuilder configBuilder 
    = new StringBuilder();
                configBuilder.Append(
    "\r\n");
                configBuilder.Append(
    "[");
                configBuilder.Append(filename);
                configBuilder.Append(
    "]");
                configBuilder.Append(
    "\r\n");
                configBuilder.Append(
    "Format=Delimited(,)");
                configBuilder.Append(
    "\r\n");
                configBuilder.Append(
    "ColNameHeader=true");
                configBuilder.Append(
    "\r\n");
                configBuilder.Append(
    "CharacterSet=ANSI");
                configBuilder.Append(
    "\r\n");
                
    foreach (string item in cols)
                {
                    index
    ++;
                    configBuilder.Append(
    "Col");
                    configBuilder.Append(index);
                    configBuilder.Append(
    "=");
                    configBuilder.Append(item);
                    configBuilder.Append(
    " Char Width ");
                    configBuilder.Append(
    4000);
                    configBuilder.Append(
    "\r\n");
                }
                
    using (StreamWriter write = new StreamWriter(configFile, true, Encoding.GetEncoding("GB2312")))
                {
                    
    if (!File.Exists(configFile))
                    {
                        File.Create(configFile);
                    }
                    write.WriteLine(configBuilder.ToString());
                }
            }
        }

    再导入数据

    private void InputCSVFile(string filename)
        {
            SqlBulkCopy bulkCopy 
    = new SqlBulkCopy(SQLHelper.connectionString, SqlBulkCopyOptions.UseInternalTransaction);
            bulkCopy.BulkCopyTimeout 
    = 30 * 60;
            bulkCopy.BatchSize 
    = 1000;
            bulkCopy.NotifyAfter 
    = 1000;
            bulkCopy.SqlRowsCopied
    +=new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
            bulkCopy.DestinationTableName 
    = "Market_Client";

            WriteConfigFile(filename);
    //编辑导入配置文件
            string[] cols=null;//所有源列
            using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                
    using (StreamReader reader = new StreamReader(fs, Encoding.Default))
                {
                    cols 
    = reader.ReadLine().Split(',');
                    reader.Close();
                    reader.Dispose();
                }
                fs.Close();
                fs.Dispose();
            }

            
    string dir = Path.GetDirectoryName(filename);
            
    string file=Path.GetFileName(filename);

            
    //构造查询语句
            StringBuilder selectBuilder = new StringBuilder();
            selectBuilder.Append(
    "select ");
            
    foreach (string col in cols)
            {
                selectBuilder.Append(col);
                selectBuilder.Append(
    ",");
            }
            
    if (selectBuilder.ToString().EndsWith(","))
            {
                selectBuilder.Remove(selectBuilder.Length 
    - 11);
            }
            selectBuilder.Append(
    string.Format(" from {0}", file));

            
    string conStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}\\;Extended Properties=\"text;HDR=Yes;FMT=Delimited(,)\";", dir);
            
    using (OleDbConnection oledbCon = new OleDbConnection(conStr))
            {
                OleDbCommand oledbCom 
    = new OleDbCommand();
                oledbCom.Connection 
    = oledbCon;
                oledbCom.CommandText 
    = selectBuilder.ToString();
                OleDbDataAdapter oAdapter 
    = new OleDbDataAdapter(oledbCom);
                DataTable dt 
    = new DataTable();
                
    try
                {
                    oAdapter.Fill(dt);
                    
    foreach (DataColumn col in dt.Columns)
                    {
                        bulkCopy.ColumnMappings.Add(
    new SqlBulkCopyColumnMapping(col.ColumnName, col.ColumnName));
                    }
                    bulkCopy.WriteToServer(dt);
                }
                
    catch (Exception e)
                {
                    
                }
            }
        }

        
    private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
        {
            Console.WriteLine(
    string.Format("已完成{0}条", e.RowsCopied));
        }
  • 相关阅读:
    C# 装箱原型
    C# 反射浅谈(一)
    javascript介绍(二)
    javascript介绍(一)
    C#中 托管资源和非托管资源
    varchar && nvarchar 闲谈
    高内聚&&低耦合
    【android】移植IOS视图响应陀螺仪交互行为
    【android】如何实现猿题库题目的排版
    开心工作标准的硬件环境
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/1571590.html
Copyright © 2011-2022 走看看