怎么使用odbc驱动和C#语言创建dbf文件,并实现对它的读写操作 本帖最后由 jingherong 于 2009-07-28 22:57:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if (saveFileDialog1.FileName.EndsWith(".dbf")) { string alldir = saveFileDialog1.FileName; string tableName = alldir.Split(new char[]{'\\'})[alldir.Split(new char[]{'\\'}).Length-1]; string dir = alldir.Replace("\\"+tableName,""); DataTable dt = ((DataSet)this.uGridInvTransline.DataSource).Tables[0]; dt.TableName = tableName; DBaseConnection dBase = new DBaseConnection(dir); rtn = dBase.ExpToFile(dt,out errCode,out errMsg); if (rtn != 0) { this.SetErrorInfo(errMsg); return; } } #region 自定义变量属性 private string filePath = null; private string connStr=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;"; private OleDbConnection conn = null; private OleDbCommand cmd = null; #endregion#region 实例化入口 /// <summary> /// 控制DBase文件类 /// </summary> /// <param name="filePath">需要操作的Dbase文件的文件夹路径</param> public DBaseConnection(string directory) { filePath = directory; connStr = string.Format(connStr,filePath); conn = new OleDbConnection(connStr); cmd = new OleDbCommand(); cmd.Connection = conn; } #endregion lz 你说的这个方法我试过了是可以生成dbf文件但是这个文件无法在access2007中打开,但是在2003中看是正常的,同事我把Extended Properties参数的值都试了下,还是不行,我的写法是 string ole_connstring =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=dBASE IV;User ID=Admin;Password="; OleDbConnection ole_conn = new OleDbConnection(ole_connstring); ole_conn.Open(); OleDbCommand cmd1 = new OleDbCommand("Create Table TestTable2 (Field1 int, Field2 char(10))", ole_conn); File.Delete(@"d:\TESTTABL.DBF"); cmd1.ExecuteNonQuery(); ole_conn.Close();希望老总帮看下错在那里了 #region Creat file /// <summary> /// 创建数据文件 /// </summary> /// <param name="dt">需要创建的数据</param> /// <param name="errMsg"></param> /// <returns></returns> private int CreatFile(DataTable dt,out string errCode,out string errMsg) { 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 我们还在用2003.....c#和office都是.... winform中询问一个子窗口操作主窗体上的控件的问题 请教一个Linq的问题 请介绍一个C#的C/S的开源代码,想学习C/S编程,最好是2.0的 问一有点弱的问题 选中checkbox in gridview,如何让itemfield下面的所有items只读 在IE中打印时怎么去掉下面的文件名 创建了一个Form增大缩小类封装,但是这个封装却没有任何效果,希望各位指点下。 使用SQLDMO备份SQL出错 把所有的CS代码都放在一个文件里有什么好处? 字符串效率问题 如何将系统字体库调入C#,同时在combo下拉菜单中显示? 需求简单算法实现以下功能,请高手指点
if (saveFileDialog1.FileName.EndsWith(".dbf"))
{
string alldir = saveFileDialog1.FileName;
string tableName = alldir.Split(new char[]{'\\'})[alldir.Split(new char[]{'\\'}).Length-1];
string dir = alldir.Replace("\\"+tableName,"");
DataTable dt = ((DataSet)this.uGridInvTransline.DataSource).Tables[0];
dt.TableName = tableName;
DBaseConnection dBase = new DBaseConnection(dir);
rtn = dBase.ExpToFile(dt,out errCode,out errMsg);
if (rtn != 0)
{
this.SetErrorInfo(errMsg);
return;
}
}
private string filePath = null;
private string connStr=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;";
private OleDbConnection conn = null;
private OleDbCommand cmd = null;
#endregion
#region 实例化入口
/// <summary>
/// 控制DBase文件类
/// </summary>
/// <param name="filePath">需要操作的Dbase文件的文件夹路径</param>
public DBaseConnection(string directory)
{
filePath = directory;
connStr = string.Format(connStr,filePath);
conn = new OleDbConnection(connStr);
cmd = new OleDbCommand();
cmd.Connection = conn;
}
#endregion
lz 你说的这个方法我试过了是可以生成dbf文件但是这个文件无法在access2007中打开,但是在2003中看是正常的,同事我把Extended Properties参数的值都试了下,还是不行,我的写法是
string ole_connstring =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=dBASE IV;User ID=Admin;Password=";
OleDbConnection ole_conn = new OleDbConnection(ole_connstring);
ole_conn.Open();
OleDbCommand cmd1 = new OleDbCommand("Create Table TestTable2 (Field1 int, Field2 char(10))", ole_conn); File.Delete(@"d:\TESTTABL.DBF");
cmd1.ExecuteNonQuery();
ole_conn.Close();希望老总帮看下错在那里了
/// <summary>
/// 创建数据文件
/// </summary>
/// <param name="dt">需要创建的数据</param>
/// <param name="errMsg"></param>
/// <returns></returns>
private int CreatFile(DataTable dt,out string errCode,out string errMsg)
{
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