DataTable导DBF

一段利用C#2005操作FOXPRO表的函数 由于工作需要,需要将一些数据保存到规定结构的FOXPRO库中,我采取的方法是这样的:

首先,拷贝标准库(空库)到指定的要导出的文件夹,然后读取这个拷贝后的文件到dt1,通过循环把dt的数据添加到dt1中,更新dt1。方法笨了一点,有谁有好的建议,可以提一提!

下面是函数代码:

//五个参数,dt是含有需要导出数据的DataTable,strExportPath是导出路径,strExportFile是导出文件名,要带有.dbf的后缀,strStructFile是标准库的文件名,含有路径,prgBar是用来在界面上显示导出进度的。

public static void dbfExport(System.Data.DataTable dt, string strExportPath, string strExportFile, string strStructFile,System.Windows.Forms.ProgressBar prgBar)         {

            //第一步:拷贝标准库    

           System.IO.File.Copy(strStructFile, strExportPath + @"\" + strExportFile, true);

            //建立连接,读取拷贝过去的那个库,注意连接字符串,使用的是vfp9.0的driver,微软网站上有下载          

           System.Data.OleDb.OleDbConnection conn1 = new System.Data.OleDb.OleDbConnection();     

          conn1.ConnectionString = @"Provider=VFPOLEDB.1;DATA Source=" + strExportPath + @"\"  +strExportFile + ";";      

          string strSQL = "SELECT * FROM " + strExportFile;          

          System.Data.OleDb.OleDbDataAdapter adp = new System.Data.OleDb.OleDbDataAdapter(strSQL, conn1);       

          System.Data.DataTable dt1 = new DataTable();        

          adp.Fill(dt1);

           //初始化进度条   

          prgBar.Value = 0;        

          prgBar.Maximum = dt.Rows.Count;

 

           //循环读取dt的数据添加到dt1,注意方法,还有一个就是null值的处理,具体要根据你的dbf库结构来设定。     

          //我的dbf库主要就是两种字段,一种是字符型,一种是整型

            for (int i = 0; i < dt.Rows.Count; i++)             {  

             DataRow dr = dt1.NewRow();                

      for (int j = 0; j < dt.Columns.Count; j++)        

             {

                    //下面这段代码我做点解释,对于dr[j]的赋值,首先判断dt.Rows[i][dt1.Colums[j].ColumnName.ToString()]的值是否为null,

                    //如果是null,则赋值为DBNull.Value;如果不是null,则插入原始值dt.Rows[i][dt1.Colums[j].ColumnName.ToString()]       

                //直接赋值null是不可以的,null主要用于对象类的数据,DataTable数据库中的null应该用DBNull.Value来代替        

               dr[j] = dt.Rows[i][dt1.Columns[j].ColumnName.ToString()] == null ? DBNull.Value : dt.Rows[i][dt1.Columns[j].ColumnName.ToString()];

                  }               

        dt1.Rows.Add(dr);                

      prgBar.Value++;          

       }

            //初始化一个CommandBuilder,目的是使得adp的更新操作初始化     

            System.Data.OleDb.OleDbCommandBuilder cmdBld = new System.Data.OleDb.OleDbCommandBuilder(adp);           

            //更新dt1,系统自动将数据添加到dbf库中           

      adp.Update(dt1);    

     }

posted on 2013-12-05 14:12  钱呢  阅读(618)  评论(0)    收藏  举报

导航