• 原创:一段利用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);
            }

  • 相关阅读:
    MySQL Online DDL导致全局锁表案例分析
    .NET Core教程--给API加一个服务端缓存啦
    任务队列和异步接口的正确打开方式(.NET Core版本)
    .NET Core中使用RabbitMQ正确方式
    .NET Core单元测试之搞死开发的覆盖率统计(coverlet + ReportGenerator )
    没有执行过rm -rf /*的开发不是好运维
    dotnet core在Task中使用依赖注入的Service/EFContext
    可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking
    dpdk中QSBR具体实现
    C语言二级指针底层实现
  • 原文地址:https://www.cnblogs.com/drsniper/p/1036957.html
Copyright © 2020-2023  润新知