如何创建一个使用C#.dbf文件? [英] How to create a .dbf file using c#?

查看:535
本文介绍了如何创建一个使用C#.dbf文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这样做一个选择,它工作得很好

 字符串str =
    SELECT * FROM自由权的JOIN TestTest ON FREE.DOCNO = TestTest.DOCNO;
数据表DT =新的DataTable();
OdbcDataAdapter的DA =新OdbcDataAdapter的(STR,odbconn);
da.Fill(DT);
 

我想它来创建一个.dbf和我得到这个OdbcException:

 字符串STR0 =创建表人士(名称char(50),市CHAR(50),电话CHAR(20),邮编十进制(5));
的OdbcCommand CMD =新的OdbcCommand(STR0,odbconn);
cmd.ExecuteNonQuery();
 

  

错误[42000] [微软] [ODBC dBase驱动程序]语法错误的字段定义。

解决方案

您的问题是由引起邮编十进制(5),作为ODBC dBase驱动程序不喜欢它。把我的头顶部,并快速谷歌之后,我不能拿出一个语法,它的将会的容忍。它接受它,如果你使用OLEDB提供而是相当欢快,内容如下:

 使用(VAR dBaseConnection =新的OleDbConnection(
    @供应商= Microsoft.Jet.OLEDB.4.0;+
    @数据源= C:\用户\ RobertWray \文档\ dBase的;+
    @扩展属性= dBase IV资料))
{
    dBaseConnection.Open();

    串createTableSyntax =
        创建表人+
        (名称char(50),市CHAR(50),电话CHAR(20),邮编十进制(5));
    VAR CMD =新的OleDbCommand(createTableSyntax,dBaseConnection);
    cmd.ExecuteNonQuery();
}
 

但有一个问题:您的确定的,你要创建的邮编列作为一个小数?不是美国居民,我不是100%的信心这个信息,但是,的根据维基百科 ZIP codeS可以用 0 启动。它们存储为数字数据类型不会让您准确地重新present了。

我的code通过ODBC创建表:

 使用(VAR dBaseConnection =新OdbcConnection(@驱动程序= {微软的dBASE驱动程序(* .DBF)}; DriverID = 277; DBQ = C:\用户\ RobertWray \文件\的dBase;))
{
    dBaseConnection.Open();

    字符串STR0 =创建表PERSON2(名称char(50),市CHAR(50),电话CHAR(20));
    VAR CMD =新的OdbcCommand(STR0,dBaseConnection);
    cmd.ExecuteNonQuery();
}
 

I am trying this to make a select and it works just fine

string str = 
    "SELECT * FROM FREE RIGHT JOIN TestTest ON FREE.DOCNO = TestTest.DOCNO";
DataTable dt = new DataTable();
OdbcDataAdapter da = new OdbcDataAdapter(str, odbconn);
da.Fill(dt);

I am trying this to create a .dbf and i get this OdbcException :

string str0 = "Create Table Persons (Name char(50), City char(50), Phone char(20), Zip decimal(5))";
OdbcCommand cmd = new OdbcCommand(str0, odbconn);
cmd.ExecuteNonQuery();

ERROR [42000] [Microsoft][ODBC dBase Driver] Syntax error in field definition.

解决方案

Your problem is caused by Zip decimal(5), as the ODBC dBase driver doesn't like it. Off the top of my head, and after a quick google, I couldn't come up with a syntax it would tolerate. It does accept it quite merrily if you use the OleDb provider instead, as follows:

using (var dBaseConnection = new OleDbConnection(
    @"Provider=Microsoft.Jet.OLEDB.4.0; " +
    @" Data Source=C:\Users\RobertWray\Documents\dBase; " +
    @"Extended Properties=dBase IV"))
{
    dBaseConnection.Open();

    string createTableSyntax = 
        "Create Table Person " +
        "(Name char(50), City char(50), Phone char(20), Zip decimal(5))";
    var cmd = new OleDbCommand(createTableSyntax, dBaseConnection);
    cmd.ExecuteNonQuery();
}

One question though: Are you sure that you want to create the Zip column as a decimal? Not being a US resident I'm not 100% confident on this information, but, according to Wikipedia ZIP codes can start with a 0. Storing them as a numeric datatype won't allow you to accurately represent that.

My code for creating the table via ODBC:

using (var dBaseConnection = new OdbcConnection(@"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\Users\RobertWray\Documents\dBase;"))
{
    dBaseConnection.Open();

    string str0 = "Create Table Person2 (Name char(50), City char(50), Phone char(20))";
    var cmd = new OdbcCommand(str0, dBaseConnection);
    cmd.ExecuteNonQuery();
}

这篇关于如何创建一个使用C#.dbf文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆