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

 

将文本文件转换为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下通过

  结:

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

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





posted @ 2008-07-16 21:49  寒蝉  阅读(1363)  评论(0编辑  收藏  举报