这是由于 字符长度超过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);
}
}