将文本文件转换为DataSet的两种方式

本文介绍两种将文本文件转换为DataSet的方法:使用ODBC.NET Framework数据提供程序和利用FileStream及StreamReader对象手动创建。针对不同文件编码格式,如Unicode,提供了具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

将文本文件转换为DataSet的两种方式

摘要:本文介绍采用ODBC .NET Framework 数据提供程序和System.IO下面的FileStream、StreamReader对象来将一定格式的文本文件转换为DataSet;

 

方式一:利用ODBC .NET Framework 数据提供程序的OdbcDataAdapter对象来填充一个DataSet

 private DataSet GetDataset(string strFilePath)
        
{
            
if (!File.Exists(strFilePath))
            
{
                
return null;
            }

            
string strFolderPath = Path.GetDirectoryName(strFilePath);
            
string strCSVFile = Path.GetFileName(strFilePath);

            DataSet ds 
= null;
            
string strConnection = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + strFolderPath + ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            
try
            
{
                
using (OdbcConnection conn = new OdbcConnection(strConnection.Trim()))
                
{
                    conn.Open();
                    
string strSql = "select * from [" + strCSVFile + "]";
                    OdbcDataAdapter odbcDAdapter 
= new OdbcDataAdapter(strSql, conn);
                    ds 
= new DataSet();
                    odbcDAdapter.Fill(ds, 
"table");
                    conn.Close();
                }

                
return ds;
            }

            
catch (Exception e)
            
{
                
throw e;
            }

            
return ds;
        }


方式二:利用FileStreamStreamReader读取文件内容,手动创建一个DataSet;

        static DataSet GetDatasetFromTxtFile(String strFilePath,String strSpilter)
        
{
            FileStream fs 
= null;
            StreamReader s 
= null;
            DataSet ds 
= null;

            
try
            
{
                fs 
= new FileStream(strFilePath, FileMode.Open);
                s 
= new StreamReader(fs, System.Text.Encoding.Unicode);
                ds 
= new DataSet();

                
//创建表
                ds.Tables.Add("unicode");

                
//生成列
                string[] columns = s.ReadLine().Split(strSpilter.ToCharArray());
                
foreach (string c in columns)
                
{
                    
if (c.Length > 0)
                    
{
                        
string[] items = c.Split(strSpilter.ToCharArray());
                        ds.Tables[
"unicode"].Columns.Add(items[0]);
                    }

                }

                
//生成行
                string AllData = s.ReadToEnd();
                
string[] rows = AllData.Split("\r\n".ToCharArray());
                
foreach (string r in rows)
                
{
                    
if (r.Length > 0)
                    
{
                        
string[] items = r.Split(strSpilter.ToCharArray());
                        ds.Tables[
"unicode"].Rows.Add(items);
                    }

                }


            }

            
catch(Exception e)
            
{
                
throw e;
            }

            
finally
            
{
                s.Close();
                fs.Close();
            }
            
            
return ds;
        }



三、测试:
 

TXT文件的格式为:(字段名和字段内容的采用逗号分开)

列名1,列名2,列名3

字段内容1,字段内容2,字段内容3

……

代码为:

测试程序,在.NET2005下通过
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.Odbc;

namespace UnicodeTest
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
//=========读取unicode文件
            String str = @"D:\unicode.txt";
            String strSpilter 
= ",";

            DataSet ds 
= GetDatasetFromTxtFile(str, strSpilter);

            
//测试输出
            DataTable dt = ds.Tables["unicode"];
            String strCol 
= string.Empty;
            
foreach (DataColumn dc in dt.Columns)
            
{
                strCol 
+= dc.ColumnName + ("\t");
            }

            Console.WriteLine(
"{0}{1}", strCol, Environment.NewLine);
            
foreach (DataRow dr in dt.Rows)
            
{
                Console.WriteLine(
"{0}{7}{1}{7}{2}{7}{3}{7}{4}{7}{5}{6}",
                    dr[
0].ToString(), dr[1].ToString(), dr[2].ToString(),
                    dr[
3].ToString(), dr[4].ToString(), dr[5].ToString(),
                    Environment.NewLine, 
"\t");

            }

            
//======================//
        }


        
static DataSet GetDatasetFromTxtFile(String strFilePath,String strSpilter)
        
{
            FileStream fs 
= null;
            StreamReader s 
= null;
            DataSet ds 
= null;

            
try
            
{
                fs 
= new FileStream(strFilePath, FileMode.Open);
                s 
= new StreamReader(fs, System.Text.Encoding.Unicode);
                ds 
= new DataSet();

                
//创建表
                ds.Tables.Add("unicode");

                
//生成列
                string[] columns = s.ReadLine().Split(strSpilter.ToCharArray());
                
foreach (string c in columns)
                
{
                    
if (c.Length > 0)
                    
{
                        
string[] items = c.Split(strSpilter.ToCharArray());
                        ds.Tables[
"unicode"].Columns.Add(items[0]);
                    }

                }

                
//生成行
                string AllData = s.ReadToEnd();
                
string[] rows = AllData.Split("\r\n".ToCharArray());
                
foreach (string r in rows)
                
{
                    
if (r.Length > 0)
                    
{
                        
string[] items = r.Split(strSpilter.ToCharArray());
                        ds.Tables[
"unicode"].Rows.Add(items);
                    }

                }


            }

            
catch(Exception e)
            
{
                
throw e;
            }

            
finally
            
{
                s.Close();
                fs.Close();
            }
            
            
return ds;
        }


        
private DataSet GetDataset(string strFilePath)
        
{
            
if (!File.Exists(strFilePath))
            
{
                
return null;
            }

            
string strFolderPath = Path.GetDirectoryName(strFilePath);
            
string strCSVFile = Path.GetFileName(strFilePath);

            DataSet ds 
= null;
            
string strConnection = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + strFolderPath + ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            
try
            
{
                
using (OdbcConnection conn = new OdbcConnection(strConnection.Trim()))
                
{
                    conn.Open();
                    
string strSql = "select * from [" + strCSVFile + "]";
                    OdbcDataAdapter odbcDAdapter 
= new OdbcDataAdapter(strSql, conn);
                    ds 
= new DataSet();
                    odbcDAdapter.Fill(ds, 
"table");
                    conn.Close();
                }

                
return ds;
            }

            
catch (Exception e)
            
{
                
throw e;
            }

            
return ds;
        }

    }

}


  结:

1.      如果文件不是ANSI文件格式而是Unicode格式时,采用方法一得到的是乱码或者空字符(我的操作系统为中文版Server2003),而采用二可以得到更好的控制,因为我们在实例化StreamReader的时候可以指定读取文件的编码格式,从而可以得到我们理想的效果;

2.      得到的DataSet可以得到DataTable来进行本地的相关数据处理也可以转换为XML或者序列化得到一个字节流来进行相关远程处理和实时传输;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值