用的是oledb连接. 创建表成功了,但是字段长度不对.
如下:
private System.Data.OleDb.OleDbConnection getDBaseConnection(string directoryPath)
        {
            if (!System.IO.Directory.Exists(directoryPath))
            {
                throw new Exception("指定的路径不存在", new Exception());
            }
            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + directoryPath + " ;Extended Properties=dBASE IV;User Id=;Password=;";            System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString);            return conn;        }private void createTable()
{
           string fileName=@"D:\dataBase\waterCard.dbf";
           OleDbConnection conn = GetDBaseConnection(new FileInfo(fileName).DirectoryName);
           createTableSql = @"create table D:\dataBase\watercard.dbf (custId NUMERIC(11) ,custNo NUMERIC(7,0) ,ajustQut NUMERIC(9,2))";
            OleDbCommand oleCmd = new OleDbCommand(createTableSql, conn);            try
            {
                conn.Open();
                oleCmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
}
程序运行正常,但是表创建后字段长度并非create table 语句中制定的长度
,而是都变成了 (20,5);
我调试了好长时间了,其他数据类型如DATE,LOGICAL,Character都没问题,就是NUMERIC字段类型不行.

解决方案 »

  1.   

    是什么数据库啊?有些数据库是没有NUMERIC类型字段的
      

  2.   

    to:cctaiyang(带头大哥) wshuangminlg
    谢谢支持。
    是 dbase IV 数据库.有NUMERIC,没有interger 所以才会需要custId NUMERIC(11),这样的。
    变通的方法也有,但是我搞不懂为什么会出现这种情况啊。
      

  3.   

    这个问题也许是微软的jet oldbd 引擎(msjetoledb.dll)不支持导致的。从网上看到有几个人问同样的问题,最后都不了了之。
    如;
    https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=811137&SiteID=1
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=137286&SiteID=1
    但是
    在http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=364457&SiteID=1 上,微软的一个mvp 说odbc dbase 同样存在这个问题,那是因为ms odbc dbase不支持。建议使用oledb vfp.呵呵,说回来了,其实我原来就是用的这个,
    string connectionString = "Provider=vfpoledb.1;Data Source=" + directoryPath + " ;Collating Sequence=MACHINE";
    只不过后来发现生成的不是dbase iv 格式,而是visual foxpro 格式,因为我的掌上电脑必须要求xbase 或 foxpro 格式,但是现在还是要使用它了,只不过在遇到需要创建interger等时,类型判断上尽量向dbase 上靠拢,如n(x,0)就相当于interger,就可以了。算是揭帖了。
      

  4.   

    现在我也遇到了这样一个问题,手持需要用dbaseIII 或者foxbase ,现在我用的是oledb jet 4.0,生成的dbf文件字段首的"_"字符被替换成了X,楼主说你的问题最后解决了,还望你不吝赐教。