C#数据表。无法使用Firebird检索或分配主键

C#数据表。无法使用Firebird检索或分配主键,c#,datatable,primary-key,firebird,C#,Datatable,Primary Key,Firebird,我希望使用Firebird将数据从数据库加载到数据集,然后使用数据集(尤其是Find)。为此,我需要为第一列分配一个主键 当我用FlameRobin查看数据库时,我可以看到约束,它告诉我主键被分配给AR_NUMMER。 但是当我尝试自己分配主键时,VisualStudio告诉我AR_NUMMER中的值不是唯一的 FlameRobin告诉我AR_NUMMER列中的值是varchar(30)(值是字母数字字符的字符串) 当这些值显然被用作主键时,它们怎么可能不是唯一的?(可能是这些值中最初存在未正确

我希望使用Firebird将数据从数据库加载到数据集,然后使用数据集(尤其是Find)。为此,我需要为第一列分配一个主键

当我用FlameRobin查看数据库时,我可以看到约束,它告诉我主键被分配给AR_NUMMER。 但是当我尝试自己分配主键时,VisualStudio告诉我AR_NUMMER中的值不是唯一的

FlameRobin告诉我AR_NUMMER列中的值是varchar(30)(值是字母数字字符的字符串)

当这些值显然被用作主键时,它们怎么可能不是唯一的?(可能是这些值中最初存在未正确检索的空格字符吗?)

我知道一定有办法用列本身加载表的约束,但我无法让它工作

这是我的代码,除主键外,其他代码均有效:

private void ... (...)
{
string inikey = "Bewegungsdaten";
string datenbank = "Daten V4";
string sql = "SELECT a.AR_NUMMER, a.AR_LFDNR, a.AR_HRSTNUMMER, AR_HRSTLFDNR, a.AR_EAN, a.AR_BEZEICHNUNG, a.AR_KURZTEXT, a.AR_ISTBESTAND, a.AR_MASSE, a.AR_AG, a.AR_ALT, a.AR_FREI, a.GEANDERT, a.ANGELEGT " +
                    "FROM ARTIKEL a ";
tabName = "Artikel";
dbAbruf(inikey, datenbank, sql, tabName);
ds.Tables["Artikel"].PrimaryKey = new DataColumn[] { ds.Tables["Artikel"].Columns["AR_NUMMER"] };
}

private void dbAbruf(string inikey, string datenbank, string sql, string tabName)
{    
        IniFile iniFile = new IniFile("D:\\Projekte\\ABPS-Schnittstellen-Programm\\ABPS-Schnittstelle\\plmWEBkonfigurator.ini");
        string conString = iniFile.GetString("ERP-WEB-DBTranslator", inikey, "");

        FbConnection con = new FbConnection();
        FbCommand cmd = new FbCommand();
        con.ConnectionString = conString;
        cmd.Connection = con;
        cmd.CommandText = sql;

        try
        {
            con.Open();
            FbDataAdapter adapter = new FbDataAdapter(cmd);
            adapter.Fill(ds,tabName);
            DataTable table = ds.Tables[tabName];
            con.Close();
        }
        catch (Exception ex)
        { MessageBox.Show(ex.ToString(), "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error); }
这是表的完整DDL。它确实很长,因为总共大约有250列

创建表ARTIKEL
(
AR_LFDNR整数不为空,
AR_NUMMER varchar(30)不为空,
AR_Bezeichung varchar(40岁),
AR_AG varchar(18),
AR_LANGTEXT blob sub_类型1,
AR_KDNUMMER varchar(10),
AR_ME varchar(10),
AR_Vorkalknumer varchar(20岁),
AR_信息blob子单元类型1,
AR_和数字(15,3)默认为0,
AR_RESERVIERT numeric(15,3)默认值为0,
AR_MindestBest和数字(15,3)默认为0,
AR_BILDDATEI varchar(250),
绝对整数,
总数值(15,4)默认值为0,
AR_MASSEEINHEIT varchar(8)默认值为“kg”,
AR_MAT1整数,
AR_MAT2整数,
AR_Lieferant 1 varchar(10),
AR_Lieferant 2 varchar(10),
AR_ANTEIL1数字(9,2)默认值为0,
AR_ANTEIL2数字(9,2)默认值为0,
AR_ANTEIL3数字(9,2)默认值为100,
AR_STUECKZEIT数字(9,2)默认值为0,
AR_STUECKZEITEINHEIT varchar(3)默认值“Min”,
AR_RUESTZEIT数字(9,2)默认值为0,
AR_RUESTZEITEINHEIT varchar(3)默认值“Min”,
AR_VERPACKUNG varchar(20岁),
ARvpe整数默认值为0,
AR_MASCHINE varchar(20),
AR_WERKZEUGNUMMER varchar(25岁),
AR_FACHZAHL smallint默认值为1,
AR_HATSTKLISTE varchar(1)默认值为“F”,
AR_EK数值(15,4)默认值为0,
AR_STL_列表blob子类型1,
AR_RAL1整数,
AR_VZTKNZ varchar(40),
AR_Zeichung varchar(30岁),
AR_TEILBEZ varchar(50岁),
AR_材料varchar(50),
阿泰尔整数,
AR_LAUFZEIT数值(5,2),
AR_KST0 varchar(8),
AR_KST1 varchar(8),
AR_KST2 varchar(8),
AR_KST3 varchar(8),
AR_KST4 varchar(8),
AR_KST5 varchar(8),
AR_WV0数值(5,2),
AR_WV1数值(5,2),
AR_WV2数值(5,2),
AR_WV3数值(5,2),
AR_WV4数字(5,2),
AR_WV5数值(5,2),
AR_WS0数值(5,2),
AR_WS1数值(5,2),
AR_WS2数值(5,2),
AR_WS3数值(5,2),
AR_WS4数值(5,2),
AR_WS5数值(5,2),
Arvpgewicht数值(5,2),
AR_KALKMP数值(9,2),
AR_TAFEL1数字(9,2),
AR_TAFEL2数值(9,2),
AR_TAFEL3数值(9,2),
AR_FREI数值(15,3)默认值为0,
AR_BEZUG smallint默认值1,
AR_MaxBest和数值(15,3)默认值为0,
AR_KUEHLZEIT数值(9,2),
AR_HASTV varchar(1)默认值为“F”,
AR_TVLFDNR整数默认值为0,
AR_TEINFO blob sub_类型1,
AR_类型varchar(1),
AR_KURZTEXT varchar(50),
AR_REV varchar(20),
AR_版本_基准时间戳,
AR_SERIENNUM_PFL varchar(1)默认值为“F”,
AR_IMSTAPEL数值(15,4)默认值为0,
AR_BESTELLT数值(15,4)默认值为0,
AR_BEDARF数值(15,4)默认值为0,
AR_ANLAGEKALK blob sub_类型1,
AR_IDNR1 varchar(30),
AR_IDNR2 varchar(30),
AR_KILL时间戳,
AR_FREIGABE varchar(1)默认值“F”,
基准时间戳,
AR_FRNAME varchar(20),
AR_GRP varchar(30),
AR_MASSEVERLUST数值(15,3),
AR_LIEFERGEWICHT数值(15,3),
AR_TRTYP smallint默认值-1,
AR_BEZEICHNUNGSPR1 varchar(40),
AR_BEZEICHNUNGSPR2 varchar(40),
AR_LANGTEXTSPR1 blob sub_类型1,
AR_LANGTEXTSPR2 blob sub_类型1,
AR_ALT varchar(1)默认值为“F”,
AR_WKZBAU varchar(1)默认值为“F”,
AR_MENGEJEVE数值(9,3),
AR_MEJEVE varchar(10),
AR_EAN varchar(13),
AR_匹配码varchar(40),
AR_BEZEICHNUNGZUSATZ varchar(40岁),
AR_KST6 varchar(8),
AR_KST7 varchar(8),
AR_KST8 varchar(8),
AR_KST9 varchar(8),
AR_WV6十进制(9,2),
AR_WV7十进制(9,2),
AR_WV8十进制(9,2),
AR_WV9十进制(9,2),
AR_WS6十进制(9,2),
AR_WS7十进制(9,2),
AR_WS8十进制(9,2),
AR_WS9十进制(9,2),
AR_WB0 varchar(250),
AR_WB1 varchar(90),
AR_WB2 varchar(90),
AR_WB3 varchar(90),
AR_WB4 varchar(90),
AR_WB5 varchar(90),
AR_WB6 varchar(90),
AR_WB7 varchar(90),
AR_WB8 varchar(90),
AR_WB9 varchar(90),
AR_KUNDE varchar(30岁),
AR_PRUEF_ANW varchar(5),
AR_VERPACKK_ANW varchar(5),
AR_TKLFDNR整数,
AR_MAT3整数,
AR_Lieferant 3 varchar(10),
AR_ANT_MAT1整数默认值为100,
AR_ANT_MAT3整数默认值为0,
AR_MAT4整数,
AR_Lieferant 4 varchar(10),
AR_ANTEIL4数字(9,2)默认值为0,
AR_LAGERORT varchar(12),
AR_BEREICH varchar(7),
AR_LETZTESN整数默认值为0,
AR_LVKURZTEXT blob sub_类型1,
ARvpegewicht数值(15,3),
AR_SCHICHT整数,
AR_PROG varchar(10),
AR_PRFILE blob sub_类型1,
AR_ZOOMFKT varchar(5)默认值为“100”,
AR_TEILEJEME整数,
AR_RAL2整数,
AR_RAL3整数,
AR_of norm varchar(120),
AR_LANGTEXTZUSATZ blob sub_类型1,
AR_MINBERECH数值(15,4),
AR_KUNDEN blob sub_类型1,
AR_FELD0 varchar(40),
AR_FELD1 varchar(40岁),
AR_FELD2 varchar(40),
AR_FELD3 varchar(40岁),
AR_FELD4 varchar(40),
AR_FELD5 varchar(40),
AR_FELD6 varchar(40),
AR_FELD7 varchar(40岁),
AR_FELD8 varchar(40),
AR_FELD9 varchar(40岁),
AR_TAFEL4数字(9,2),
AR_SPPROG varchar(3),
AR_MAT5整数,
AR_Lieferant 5 varchar(10),
AR_ANTEIL5数字(9,2),
AR_DEFFELD0 varchar(40),
AR_DEFFELD1 varchar(40),
AR_DEFFELD2 varchar(40),
AR_DEFFELD3 varchar(40),
AR_DEFFELD4 varchar(40),
AR_DEFFELD5 varchar(40),
AR_DEFFELD6 varchar(40),
AR_DEF