dbf文件 字段将不能置于记录中

这是由于 字符长度超过50的数据太多导致。解决方案如下

一。往小了改看会不会报错,如果改成40就不会报这个错了

StringBuilder sbCreate = new StringBuilder();
                sbCreate.Append("CREATE TABLE table1" + " (");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sbCreate.Append(dt.Columns[i].ColumnName);
                    sbCreate.Append(" char(40)");
                    if (i != dt.Columns.Count - 1)
                    {
                        sbCreate.Append(", ");
                    }
                    else
                    {
                        sbCreate.Append(")");
                    }

                }

二。table的容量可能有限,当字段过多时,总数有限制(猜想)

 private void WriteToDbf(DataTable dt,string fileName)
        {
            var result = 0;
            //连接字符串
            string sConn =
                "Provider=Microsoft.Jet.OLEDB.4.0; " +
                "Data Source=" + fileName + "; " +
                "Extended Properties='dBASE IV';";
            OleDbConnection conn = new OleDbConnection(sConn);
            conn.Open();
  
            try
            {
                //如果存在同名文件则先删除
                string strFileName = fileName + "\\table1.DBF";
                if (File.Exists(@strFileName))
                {
                    File.Delete(@strFileName);
                }
  
                OleDbCommand cmd;
  
                //建立新表
                StringBuilder sbCreate = new StringBuilder();
                sbCreate.Append("CREATE TABLE table1" + " (");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sbCreate.Append(dt.Columns[i].ColumnName);
                    if (dt.Columns[i].ColumnName == "SSJCZMC1" || dt.Columns[i].ColumnName == "SSJCZMC2" || dt.Columns[i].ColumnName == "SSJCZMC3" || dt.Columns[i].ColumnName == "SSJCZMC4"
                        || dt.Columns[i].ColumnName == "SSJCZMC5" || dt.Columns[i].ColumnName == "SSJCZMC6" || dt.Columns[i].ColumnName == "WBYY" || dt.Columns[i].ColumnName == "GZDWJDZ"
                        || dt.Columns[i].ColumnName == "HKDZ" || dt.Columns[i].ColumnName == "DZ")
                    {
                        sbCreate.Append(" char(50)");
                    }
                    else
                    {
                        sbCreate.Append(" char(18)");
                    }
                    
                    if (i != dt.Columns.Count - 1)
                    {
                        sbCreate.Append(", ");
                    }
                    else
                    {
                        sbCreate.Append(")");
                    }
                }
             


                cmd = new OleDbCommand(sbCreate.ToString(), conn);
                cmd.ExecuteNonQuery();
  
                //插入各行
            StringBuilder sbInsert = new StringBuilder();
            foreach (DataRow dr in dt.Rows)
            {
                sbInsert.Remove(0, sbInsert.Length);
                sbInsert.Append("INSERT INTO table1 (" );
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sbInsert.Append(dt.Columns[i].ColumnName);
                    if (i != dt.Columns.Count - 1)
                    {  
                        sbInsert.Append(", ");
                    }
                }
                sbInsert.Append(") VALUES (");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sbInsert.Append("'" + dr[i].ToString() + "'");
                    if (i != dt.Columns.Count - 1)
                    {
                        sbInsert.Append(", ");
                    }
                }
                sbInsert.Append(");");


                cmd = new OleDbCommand(sbInsert.ToString(), conn);
                result=cmd.ExecuteNonQuery();
              }
            
           }
            catch (Exception ex)
            {
                MessageBox.Show("导出失败!",ex.Message);
            }
            conn.Close();
            if (result>0)
            {
                MessageBox.Show("导出成功!");
            }

        }



  /// <summary>
        /// 导出dbf
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOutDbf_Click(object sender, EventArgs e)
        {
            string DtFrom = dtFrom.Value.ToString("yyyy-MM-dd");
            string DtTo = dtTo.Value.ToString("yyyy-MM-dd");
            string strWhere = "";
            //出院日期
            if (DtFrom.ToString() != "0001-01-01" && DtTo.ToString() != "0001-01-01")
            {
                strWhere += " and (CYSJ>='" + DtFrom + "'and CYSJ<='" + DtTo + "')";
            }
            string sql = "select * from VW_ZYBASY_JCZBXT where 1=1" + strWhere + " order by bah";
            DataSet ds = OracleDataAccess.ExecuteDataSet(sql);


            if (ds != null)
            {
                dt = ds.Tables[0];
            }


            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "选择dBase IV文件保存的文件夹";
            fbd.SelectedPath = System.Environment.CurrentDirectory;
            fbd.ShowNewFolderButton = true;
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                WriteToDbf(dt, fbd.SelectedPath);
            }
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值