如何在C#中创建的.dbf表中保留列顺序?

时间:2010-06-24 08:04:55

标签: c# visual-foxpro dbf

我正在尝试使用Visual C#创建.dbf表,因为我需要它将数据导入到另一个应用程序。为此,我需要列顺序完全正确,否则应用程序将不接受该表。到目前为止它一直运行正常,但最近我不得不对表的结构进行一些更改,并且我已经在CREATE语句中的确切位置添加了列。我得到的问题是,当我使用Visual Fox Pro创建后打开表时,新列位于表的末尾,而不是我放置它们的位置。

我的代码如下:

#region create dbf file
        //create the file again
        string strCreate = "CREATE TABLE " + strExportPath + "\\"+fisier+" " + 
            "(TIPD Numeric(1), "+
            " LN Numeric(2), " +
            " AN Numeric(4), "+
            " DEN_ANG Char(50), " +
            " CUI Char(13), " +
            " NR_CRT Numeric(6), "+
            " TIP_RECTIF Char(1), " +
            " NUME_ASIG Char(50), " +
            " CNP Char(13), "+
            " CNP_COPIL Char(13), "+
            " CAS_ASIG Char(2), "+
            " ZI_LUCRAT Numeric(2), "+
            " TOT_ZI_LUC Numeric(2), "+
            " SERIE_CCM Char(5), "+
            " NUMAR_CCM Char(10), "+
            " SERIE_CCM_ Char(5), "+
            " NUMAR_CCM_ Char(10), "+
            " DATA_ACORD DATE, " +
            " COD_INDEMN Char(2), " +
            " ZI_PRE_ANG Numeric(1), "+
            " ZI_FN Numeric(2), " +
            " ZI_PRE Numeric(2), "+
            " LOC_PRES Numeric(2), "+
            " SUM_ANG Numeric(18), "+
            " FN Numeric(18), " +
            " DATA_INC DATE, "+
            " DATA_SF DATE, "+
            " COD_URG Char(3), " +
            " COD_CONTAG Char(2), "+
            " BAZA_CALC Numeric(6), "+
            " ZI_BZ_CALC Numeric(3), "+
            " MZBCI Numeric(8,4), "+
            " ME_NR CHAR(10))";



        OleDbConnection con = new OleDbConnection(strConn);
        try 
        {
            con.Open();
        }
        catch //(Exception ex)
        {
            NMsgBox("Err", "", "Renunta");
            return;
        }

        OleDbCommand createCmd = new OleDbCommand(strCreate, con);
        try
        {
            createCmd.ExecuteNonQuery();
        }
        catch //(Exception ex)
        {
            NMsgBox("Err "+fisier, "", Renunta");
            return;
        }
        con.Close();

像CNP_COPIL,DATA_ACORD和LOC_PRES这样的列是一些新列,并且总是放在最后,即使我在Visual Fox Pro中执行CREATE COMMAND

我还可以提一下,我每次创建一个空表并用数据填充它,我不做alter table,因为我不需要。每个月都有一张新桌子。

而且我似乎不明白为什么它会将“新列”放在最后,即使该表是新表并且我已从该位置删除了每一个

2 个答案:

答案 0 :(得分:1)

当桌子是全新的时候,当然没有意义重新排序列。当你查看表结构时,顺序看起来是正确的。

只有一个很好的解释:无论你使用什么程序看表,都记住了上次运行的列顺序。并将新列放在最后。这将是一个非常普遍和令人向往的功能,允许用户像上次看到它一样取回桌子的视图。布局数据必须存储在程序的私有数据中,.dbf文件格式不能存储它。

这只是一个显示工件,它不会以任何方式影响正常操作。

答案 1 :(得分:0)

您可以在Foxpro IDE中更改Foxpro表的列顺序。

USE table EXCLUSIVE
MODIFY STRUCTURE

单击该字段左侧的按钮,然后将其向上或向下拖动到您需要的位置。

编辑:在读完关于它在你老板电脑上工作的评论之后,听起来问题是foxuser.dbf正在记住你上次浏览的列顺序 - 因为列不是最后一次它只是在最后显示它们虽然它们真的在中间。

您使用什么确切的命令查看计算机上的表格?