前些天由于客户需求,C#开发的程序需要做一个导出Visual FoxPro(.dbf)数据库文件的功能。
不会呀,从网上找了好长时间,终于被我找到了,自己稍作修改,经测试,可以导出,并且导出的文件可以正常打开,前提是已经安装了Visual FoxPro
相关代码:
private void simpleButton1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn();
dc.ColumnName = "CH";
dt.Columns.Add(dc);
DataRow row = dt.NewRow();
row["CH"] = "1234567";
dt.Rows.Add(row);
dt.TableName = "testTable";
string eCode = "010";
string eCongtent = "文件导出失败";
new BaseBLL().CreatFile(dt, out eCode, out eCongtent, @"D:\");
}
public int ExcCommandText(string sqlString,out string errCode,out string errMsg)
{
string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=dBASE IV;User ID=Admin;Password=";
OleDbConnection olecon = new OleDbConnection(connStr.ToString());
OleDbCommand sda = new OleDbCommand();
sda.CommandText = sqlString;
sda.Connection = olecon;
int result = -1;
errCode = "-1";
errMsg = "未执行";
try
{
using (olecon)
{
olecon.Open();
result = sda.ExecuteNonQuery();
errCode = "1";
errMsg = "执行成功";
olecon.Close();
}
}
catch
{
result = -2;
errCode = "0";
errMsg = "执行失败";
}
return result;
}
#region Creat file
/// <summary>
/// 创建数据文件
/// </summary>
/// <param name="dt">需要创建的数据</param>
/// <param name="errMsg"></param>
/// <returns></returns>
public int CreatFile(DataTable dt, out string errCode, out string errMsg,string filePath)
{
errCode = null; errMsg = null; int rtn = 0;
try
{
//需创建的文件名称
string fileName = dt.TableName + ".dbf";
//判断文件是否存在
DirectoryInfo dir = new DirectoryInfo(filePath);
if (dir != null)
{
if (dir.GetFiles(fileName).Length > 0)
{
//已经存在则删除原有数据
rtn = this.ExcCommandText("drop table " + dt.TableName, out errCode, out errMsg);
if (rtn != 0)
{
return rtn;
}
}
}
//构建创建文件数据结构语句
string sqlCreat = "create table " + dt.TableName + "({0})";
string columns = "";
foreach (DataColumn col in dt.Columns)
{
columns += col.ColumnName;
columns += " char(100),";
}
columns = columns.Remove(columns.Length - 1, 1);
sqlCreat = string.Format(sqlCreat, columns);
rtn = ExcCommandText(sqlCreat, out errCode, out errMsg);
if (rtn != 0)
{
return rtn;
}
//导入数据
foreach (DataRow row in dt.Rows)
{
string sqlInsert = "insert into " + dt.TableName + " values({0})";
string invalues = "";
foreach (DataColumn col in dt.Columns)
{
invalues += "'" + row[col].ToString() + "',";
}
invalues = invalues.Remove(invalues.Length - 1, 1);
sqlInsert = string.Format(sqlInsert, invalues);
rtn = ExcCommandText(sqlInsert, out errCode, out errMsg);
if (rtn != 0)
{
return rtn;
}
}
return rtn;
}
catch (System.Exception e)
{
errMsg = e.Message + "|" + e.StackTrace;
return -1;
}
}
#endregion