C#win form解决导入CSV文件数据缺失问题

winform CSV文件入库数据缺失

csharp 复制代码
public string TransferCSVData(string csvFile, string tablename, string connectionString)
        {
            try
            {
                DataTable dataTable = new DataTable();
                string[] columnNames = File.ReadLines(csvFile, Encoding.GetEncoding("GBK")).First().Split(',');//设置了编码格式为GBK
                foreach (string columnName in columnNames)
                {
                    dataTable.Columns.Add(columnName, typeof(string));
                }
                foreach (string line in File.ReadLines(csvFile, Encoding.GetEncoding("GBK")).Skip(1))//设置了编码格式为GBK
                {
                    string[] values = line.Split(',');
                    DataRow dataRow = dataTable.NewRow();
                    for (int i = 0; i < values.Length; i++)
                    {
                        dataRow[i] = values[i];
                    }
                    dataTable.Rows.Add(dataRow);
                }

                // 下面是您给出的部分代码
                int rowsnum = dataTable.Rows.Count;
                progressBar1.Maximum = rowsnum;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                    {
                        bulkCopy.BulkCopyTimeout = 666666666;
                        bulkCopy.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
                        bulkCopy.BatchSize = 100; //每次传输的行数
                        bulkCopy.NotifyAfter = 100; //进度提示的行数
                        bulkCopy.DestinationTableName = tablename; //目标表
                        bulkCopy.WriteToServer(dataTable);
                        bulkCopy.Close(); //关闭对象
                        richTextBox1.SelectionColor = Color.Blue;
                        richTextBox1.AppendText(System.IO.Path.GetFileName(csvFile) + "导入完成!!!!\n");
                        return "TAG";
                    }
                }
            }
            catch (Exception ex)
            {
                // 异常处理部分
                System.Windows.Forms.MessageBox.Show(ex.Message);
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.AppendText(System.IO.Path.GetFileName(csvFile) + "导入失败!!!!" + "\n");
                richTextBox2.SelectionColor = Color.Red;
                richTextBox2.AppendText(DateTime.Now.ToString("HH:mm:ss  ") + "导入异常" + "\n");
                if (ex.Message == "与源或目标中的任意列均不匹配。")
                {
                    richTextBox1.AppendText("详细失败原因如下:导入的EXCEL的单元格列数比设定的列数多,请检查EXCEL的数据是否异常\n");
                }
                else richTextBox1.AppendText("详细失败原因如下:" + ex.Message + "\n");
                Application.DoEvents();
                return "";
            }
        }

        public string TransferCSVData0(string csvFile, string tablename, string connectionString)
        {
            try
            {
                DataTable dataTable = new DataTable();
                string[] columnNames = File.ReadLines(csvFile).First().Split(',');
                foreach (string columnName in columnNames)
                {
                    dataTable.Columns.Add(columnName, typeof(string));
                }
                foreach (string line in File.ReadLines(csvFile).Skip(1))
                {
                    string[] values = line.Split(',');
                    DataRow dataRow = dataTable.NewRow();
                    for (int i = 0; i < values.Length; i++)
                    {
                        dataRow[i] = values[i];
                    }
                    dataTable.Rows.Add(dataRow);
                }
                int rowsnum = dataTable.Rows.Count;
                progressBar1.Maximum = rowsnum;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                    {
                        bulkCopy.BulkCopyTimeout = 666666666;
                        bulkCopy.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
                        bulkCopy.BatchSize = 100; //每次传输的行数
                        bulkCopy.NotifyAfter = 100; //进度提示的行数
                        bulkCopy.DestinationTableName = tablename; //目标表
                        bulkCopy.WriteToServer(dataTable);
                        bulkCopy.Close(); //关闭对象
                        richTextBox1.SelectionColor = Color.Blue;
                        richTextBox1.AppendText(System.IO.Path.GetFileName(csvFile) + "导入完成!!!!\n");
                        return "TAG";
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.AppendText(System.IO.Path.GetFileName(csvFile) + "导入失败!!!!" + "\n");
                richTextBox2.SelectionColor = Color.Red;
                richTextBox2.AppendText(DateTime.Now.ToString("HH:mm:ss  ") + "导入异常" + "\n");
                if (ex.Message == "与源或目标中的任意列均不匹配。")
                {
                    richTextBox1.AppendText("详细失败原因如下:导入的EXCEL的单元格列数比设定的列数多,请检查EXCEL的数据是否异常\n");
                }
                else richTextBox1.AppendText("详细失败原因如下:" + ex.Message + "\n");
                Application.DoEvents();
                return "";
            }
        }
相关推荐
Wang's Blog1 分钟前
Java 项目实战: 交友项目 - 查询单条动态:动态详情页的接口与实现
java·开发语言·交友
yuniko-n2 分钟前
【JUC】CAS
java·开发语言
紧跟先前的步伐5 分钟前
Go AI Agent 实战 17|模型适配层设计:让模型可替换
开发语言·人工智能·后端·ai·golang
小灰灰搞电子16 分钟前
Qt 中使用 QSettings 存储结构体数据详解
开发语言·qt
外收内放21 分钟前
FastAPI猜字谜实战(5):会话管理
开发语言·python·学习·fastapi
Ai-_Man22 分钟前
Microsoft Copilot对话数据怎么导入到另外一个Microsoft Copilot账号里去?AI导出鸭
开发语言·javascript·人工智能·microsoft·chatgpt·ecmascript·copilot
H.莓飛27 分钟前
【数据结构】归并与外排序
linux·服务器·c语言·开发语言·数据结构·visual studio
技术老孙29 分钟前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
java·开发语言·spring boot
淡海水1 小时前
07-04-源码-.NET Core GC清扫与压缩
unity·架构·c#·.netcore·gc·1024程序员节
星夜离尘569 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分