如何读取CSV文件到DataTable中,然后存到数据库
2013-12-17 10:12
369 查看
public void FileToDB() { string line = "";//将文件中的一行数据读出,赋值给line int i = 0;//计数文件中的行数 int linenumber = 0;//文件中的总行数 string sql = "select top 1 * from 表";//从数据库读取某一张表,主要是为了获取表的结构 DataSet dt = DataSelectMyTest(sql, "table");//执行sql语句,返回DataSet dt.Clear();//清空数据 string fileName = @"csv文件的绝对路径"; FileStream fs = new FileStream(fileName, FileMode.Open); System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");//西欧语言里的iso 8859-1 StreamReader m_streamReader = new StreamReader(fs, iso_8859_1); linenumber = m_streamReader.ReadToEnd().Split('\n').Length; //Console.WriteLine("文件一共有{0}行!",linenumber); fs.Seek(0, SeekOrigin.Begin);//回转到文件开头 DataTable Table = new DataTable("table"); while (((line = m_streamReader.ReadLine()) != null)) { i++; if (i == 1)//第一行是列名 { string[] str = CutComma(line);//去除列名之间的所有空格 for (int k = 0; k < str.Length; k++) { str[k] = CutSpace(str[k]);//去除列名中的空格 DataColumn Column = new DataColumn(); Column.DataType = System.Type.GetType("System.String"); Column.ColumnName = str[k].ToString(); Table.Columns.Add(Column); } } if (i <= linenumber - 1 && i > 1)//(文件的第一行就是列名,文件结尾多出来一行空白的) { int i1 = 0; string str = ""; DataRow temprow = Table.NewRow(); bool flag = true; for (int j = 0; j < line.Length; j++) { if (flag == true) { if (line[j] == '\"') { flag = false; continue; } else if (line[j] != ',') { str = str + line[j]; if (j == line.Length - 1) { temprow[i1] = str;//最后一列不为空的时候 } } else if (line[j] == ',' && line[j - 1] != '\"') { //赋值 temprow[i1] = str; str = ""; i1 = i1 + 1; if (j == line.Length - 1) { temprow[i1] = str;//最后一列为空的时候 } } } else { if (line[j] != '\"') { str = str + line[j]; } else { flag = true; //赋值 temprow[i1] = str; str = ""; i1 = i1 + 1; continue; } } } Table.Rows.Add(temprow); } } } string strConnection = "数据库的配置"; SqlConnection conn = new SqlConnection(strConnection); SqlBulkCopy bcp = new SqlBulkCopy(conn); conn.Open(); bcp.DestinationTableName = "数据库中对应的表"; bcp.WriteToServer(dt.Tables["table"]); //把数据写入到一张表中 conn.Close(); dt.Clear(); }
//代码还可以进一步的优化,比如,有可能数据库中的表结构,和CSV中的并不对应,届时,就需要自己对列进行一一对应了
//需要注意的是csv文件的编码,以及使用那个notepad++打开文件,列与列之间怎么分隔开的
//在数据库配置之前,需要把之前创建的Table放到dt中名为"table"的表中,
相关文章推荐
- 如何读取csv文件并存入数据库?
- Android读取csv文件并写到数据库中
- 如何读取csv文件的内容
- 快速读取csv平面文件,并导入数据库,简单小工具
- DataTable 读取CSV文件
- java读取文件以字节流的形式读取 然后转化为字节流数组,最后经过SHA1加密生成返回16进制字符串存入数据库
- php如何读取文件并写入数据库
- 如何将pictureBox里的图片保存到数据库,然后从数据读取显示
- SOAPUI 接口自动化学习笔记节选 如何用Groovy 脚本读取CSV 文件
- NET(C#)中将DataTable内容写入到CSV文件 与 将CSV文件内容读取到DataTable中(原创)
- .NET(C#)中将DataTable内容写入到CSV文件 与 将CSV文件内容读取到DataTable中(原创)
- 如何读取csv文件的内容
- C#读取Excel写入数据库/将 Excel 文件转成 DataTable
- 读取csv文件内容到DataTable
- 如何读取csv文件的内容
- 读取Assets中的文件并写入数据库然后读出
- C#2005如何读取XML文件中的数据库连接字符串??? (好像和2003不一样啊) 急,跪求!
- 如何读取配置文件连接数据库
- 使用python读取csv文件快速插入数据库
- c#读取csv文件成DataTable,将DataTable数据存储为csv格式文件