文本流方式读写
一、读取DataTable数据:
// 存储要读取的数据表 DataTable dataTable = new DataTable(); // 分隔符文件路径 string file = "C:/data.text"; // 分隔符类型 // delimited = "\t"; // delimited = ","; // delimited = " "; string delimited = ","; // 打开分隔符文件 StreamReader streamReader = new StreamReader(file, Encoding.Default); // 读取表格列名 string line = streamReader.ReadLine(); string[] cols = line.Split(new string[] { delimited }, StringSplitOptions.None); foreach (string col in cols) { dataTable.Columns.Add(col); } // 读取表格行数据 while (!streamReader.EndOfStream) { line = streamReader.ReadLine(); string[] row = line.Split(new string[] { delimited }, StringSplitOptions.None); if (row.Length == cols.Length) { List<object> list = new List<object>(); foreach (string item in row) { list.Add(item); } dataTable.Rows.Add(list.ToArray()); } } // 关闭分隔符文件 streamReader.Close(); return dataTable;
二、写入DataTable数据:
// 要写入的数据表 DataTable dataTable = new DataTable(); // 分隔符文件保存路径 string file = "C:/data.text"; // 分隔符类型 // delimited = "\t"; // delimited = ","; // delimited = " "; string delimited = ","; // 创建分隔符文件 StreamWriter streamWriter = new StreamWriter(file, false, Encoding.Default); List<string> buffer = new List<string>(); // 写入表格列名 foreach (DataColumn dataColumn in dataTable.Columns) { buffer.Add(dataColumn.ColumnName); } streamWriter.Write(string.Join(delimited, buffer)); // 写入表格行数据 foreach (DataRow dataRow in dataTable.Rows) { buffer.Clear(); streamWriter.WriteLine(); foreach (DataColumn dataColumn in dataTable.Columns) { object value = dataRow[dataColumn]; buffer.Add(value == null ? "" : value.ToString()); } streamWriter.Write(string.Join(delimited, buffer)); } // 关闭分隔符文件 streamWriter.Flush(); streamWriter.Close();
ADO.NET方式读写
读取DataTable数据:
// 存储要读取的数据表 DataTable dataTable = new DataTable(); // 分隔符文件路径 string file = "C:/data.text"; // 获取架构文件路径 string directory = Path.GetDirectoryName(file); string schema = Path.Combine(directory, "schema.ini"); // 生成架构文件 StreamWriter streamWriter = new StreamWriter(schema, false, Encoding.Default); // 分隔符文件名称 string fileName = Path.GetFileName(file); streamWriter.WriteLine("[" + fileName + "]"); // 首行是否为列名 streamWriter.WriteLine("ColNameHeader=True"); // 分隔符类型 // 字段以Tab字符分割:TabDelimited // 字段以逗号字符分割:CSVDelimited // 除双引号外的其他分隔符(一个字符长度):Delimited(自定义分隔符) // 字段为固定长度:FixedLength string delimited = "CSVDelimited"; streamWriter.WriteLine("Format=" + delimited); // 系统扫描多少行数据来决定字段类型 streamWriter.WriteLine("MaxScanRows=88"); // 字符集类型:OEM或ANSI streamWriter.WriteLine("CharacterSet=OEM"); streamWriter.Close(); // OldDb链接字符串 string format = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;HDR=Yes;FMT={1};IMEX=1';Persist Security Info=False"; // 打开OldDb链接 OleDbConnection connection = new OleDbConnection(string.Format(format, directory, delimited)); connection.Open(); // 查询分隔符文件数据 OleDbCommand command = new OleDbCommand("select * from [" + fileName + "]", connection); // 读取数据到数据表对象 OleDbDataAdapter adapter = new OleDbDataAdapter(command); adapter.Fill(dataTable); adapter = null; // 关闭OldDb链接 connection.Close(); return dataTable;