首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#数据表。无法使用Firebird检索或分配主键

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

Stack Overflow用户
提问于 2017-08-24 20:51:28
回答 2查看 282关注 0票数 1

我想使用Firebird将数据库中的数据加载到数据集中,然后使用该数据集(特别是使用Find)。为此,我需要为第一列分配一个主键。

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

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

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

我知道一定有一种方法可以用列本身加载表的约束,但我不能让它工作。

这是我的代码,除了主键:

代码语言:javascript
运行
复制
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列。

代码语言:javascript
运行
复制
CREATE TABLE ARTIKEL
(
  AR_LFDNR integer NOT NULL,
  AR_NUMMER varchar(30) NOT NULL,
  AR_BEZEICHNUNG varchar(40),
  AR_AG varchar(18),
  AR_LANGTEXT blob sub_type 1,
  AR_KDNUMMER varchar(10),
  AR_ME varchar(10),
  AR_VORKALKNUMMER varchar(20),
  AR_INFO blob sub_type 1,
  AR_ISTBESTAND numeric(15,3) DEFAULT 0,
  AR_RESERVIERT numeric(15,3) DEFAULT 0,
  AR_MINDESTBESTAND numeric(15,3) DEFAULT 0,
  AR_BILDDATEI varchar(250),
  AR_RAL integer,
  AR_MASSE numeric(15,4) DEFAULT 0,
  AR_MASSEEINHEIT varchar(8) DEFAULT 'kg',
  AR_MAT1 integer,
  AR_MAT2 integer,
  AR_LIEFERANT1 varchar(10),
  AR_LIEFERANT2 varchar(10),
  AR_ANTEIL1 numeric(9,2) DEFAULT 0,
  AR_ANTEIL2 numeric(9,2) DEFAULT 0,
  AR_ANTEIL3 numeric(9,2) DEFAULT 100,
  AR_STUECKZEIT numeric(9,2) DEFAULT 0,
  AR_STUECKZEITEINHEIT varchar(3) DEFAULT 'Min',
  AR_RUESTZEIT numeric(9,2) DEFAULT 0,
  AR_RUESTZEITEINHEIT varchar(3) DEFAULT 'Min',
  AR_VERPACKUNG varchar(20),
  AR_VPE integer DEFAULT 0,
  AR_MASCHINE varchar(20),
  AR_WERKZEUGNUMMER varchar(25),
  AR_FACHZAHL smallint DEFAULT 1,
  AR_HATSTKLISTE varchar(1) DEFAULT 'F',
  AR_EK numeric(15,4) DEFAULT 0,
  AR_STL_LIST blob sub_type 1,
  AR_RAL1 integer,
  AR_VZTKNZ varchar(40),
  AR_ZEICHNUNG varchar(30),
  AR_TEILBEZ varchar(50),
  AR_MATERIAL varchar(50),
  AR_TEILE integer,
  AR_LAUFZEIT numeric(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 numeric(5,2),
  AR_WV1 numeric(5,2),
  AR_WV2 numeric(5,2),
  AR_WV3 numeric(5,2),
  AR_WV4 numeric(5,2),
  AR_WV5 numeric(5,2),
  AR_WS0 numeric(5,2),
  AR_WS1 numeric(5,2),
  AR_WS2 numeric(5,2),
  AR_WS3 numeric(5,2),
  AR_WS4 numeric(5,2),
  AR_WS5 numeric(5,2),
  AR_VPGEWICHT numeric(5,2),
  AR_KALKMP numeric(9,2),
  AR_TAFEL1 numeric(9,2),
  AR_TAFEL2 numeric(9,2),
  AR_TAFEL3 numeric(9,2),
  AR_FREI numeric(15,3) DEFAULT 0,
  AR_BEZUG smallint DEFAULT 1,
  AR_MAXBESTAND numeric(15,3) DEFAULT 0,
  AR_KUEHLZEIT numeric(9,2),
  AR_HASTV varchar(1) DEFAULT 'F',
  AR_TVLFDNR integer DEFAULT 0,
  AR_TEINFO blob sub_type 1,
  AR_TYP varchar(1),
  AR_KURZTEXT varchar(50),
  AR_REV varchar(20),
  AR_REV_DATUM timestamp,
  AR_SERIENNUM_PFL varchar(1) DEFAULT 'F',
  AR_IMSTAPEL numeric(15,4) DEFAULT 0,
  AR_BESTELLT numeric(15,4) DEFAULT 0,
  AR_BEDARF numeric(15,4) DEFAULT 0,
  AR_ANLAGEKALK blob sub_type 1,
  AR_IDNR1 varchar(30),
  AR_IDNR2 varchar(30),
  AR_KILL timestamp,
  AR_FREIGABE varchar(1) DEFAULT 'F',
  AR_FRDATUM timestamp,
  AR_FRNAME varchar(20),
  AR_GRP varchar(30),
  AR_MASSEVERLUST numeric(15,3),
  AR_LIEFERGEWICHT numeric(15,3),
  AR_TRTYP smallint DEFAULT -1,
  AR_BEZEICHNUNGSPR1 varchar(40),
  AR_BEZEICHNUNGSPR2 varchar(40),
  AR_LANGTEXTSPR1 blob sub_type 1,
  AR_LANGTEXTSPR2 blob sub_type 1,
  AR_ALT varchar(1) DEFAULT 'F',
  AR_WKZBAU varchar(1) DEFAULT 'F',
  AR_MENGEJEVE numeric(9,3),
  AR_MEJEVE varchar(10),
  AR_EAN varchar(13),
  AR_MATCHCODE varchar(40),
  AR_BEZEICHNUNGZUSATZ varchar(40),
  AR_KST6 varchar(8),
  AR_KST7 varchar(8),
  AR_KST8 varchar(8),
  AR_KST9 varchar(8),
  AR_WV6 decimal(9,2),
  AR_WV7 decimal(9,2),
  AR_WV8 decimal(9,2),
  AR_WV9 decimal(9,2),
  AR_WS6 decimal(9,2),
  AR_WS7 decimal(9,2),
  AR_WS8 decimal(9,2),
  AR_WS9 decimal(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 integer,
  AR_MAT3 integer,
  AR_LIEFERANT3 varchar(10),
  AR_ANT_MAT1 integer DEFAULT 100,
  AR_ANT_MAT3 integer DEFAULT 0,
  AR_MAT4 integer,
  AR_LIEFERANT4 varchar(10),
  AR_ANTEIL4 numeric(9,2) DEFAULT 0,
  AR_LAGERORT varchar(12),
  AR_BEREICH varchar(7),
  AR_LETZTESN integer DEFAULT 0,
  AR_LVKURZTEXT blob sub_type 1,
  AR_VPEGEWICHT numeric(15,3),
  AR_SCHICHT integer,
  AR_PROG varchar(10),
  AR_PRFILE blob sub_type 1,
  AR_ZOOMFKT varchar(5) DEFAULT '100',
  AR_TEILEJEME integer,
  AR_RAL2 integer,
  AR_RAL3 integer,
  AR_OFLNORM varchar(120),
  AR_LANGTEXTZUSATZ blob sub_type 1,
  AR_MINBERECH numeric(15,4),
  AR_KUNDEN blob sub_type 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 numeric(9,2),
  AR_SPPROG varchar(3),
  AR_MAT5 integer,
  AR_LIEFERANT5 varchar(10),
  AR_ANTEIL5 numeric(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_DEFFELD7 varchar(40),
  AR_DEFFELD8 varchar(40),
  AR_DEFFELD9 varchar(40),
  AR_DEFFELD10 varchar(40),
  AR_DEFFELD11 varchar(40),
  AR_DEFFELD12 varchar(40),
  AR_DEFFELD13 varchar(40),
  AR_DEFFELD14 varchar(40),
  AR_DEFFELD15 varchar(40),
  AR_DEFFELD16 varchar(40),
  AR_DEFFELD17 varchar(40),
  AR_DEFFELD18 varchar(40),
  AR_DEFFELD19 varchar(40),
  AR_CHARGE smallint DEFAULT 0,
  AR_ISKT smallint DEFAULT 0,
  AR_KSTV1 varchar(8),
  AR_KSTV2 varchar(8),
  AR_WVV1 numeric(5,2),
  AR_WVV2 numeric(5,2),
  AR_WSV1 numeric(5,2),
  AR_WSV2 numeric(5,2),
  AR_WBV1 varchar(90),
  AR_WBV2 varchar(90),
  AR_ZUBEHORAUTO varchar(1) DEFAULT 'F',
  AR_VP1CHK smallint DEFAULT 0,
  AR_VP2CHK smallint DEFAULT 0,
  AR_VP3CHK smallint DEFAULT 0,
  AR_VP4CHK smallint DEFAULT 0,
  AR_VP1 varchar(50),
  AR_VP2 varchar(50),
  AR_VP3 varchar(50),
  AR_VP4 varchar(50),
  AR_VP1STK integer,
  AR_VP2STK integer,
  AR_VP3STK integer,
  AR_VP4STK integer,
  AR_VP1NR varchar(30),
  AR_VP2NR varchar(30),
  AR_VP3NR varchar(30),
  AR_VP4NR varchar(30),
  AR_VP1TARA numeric(9,2),
  AR_VP2TARA numeric(9,2),
  AR_VP3TARA numeric(9,2),
  AR_VP4TARA numeric(9,2),
  AR_MTKLASSE varchar(12),
  AR_ZINDEX varchar(12),
  AR_MTKLASSE1 varchar(12),
  AR_MTKLASSE2 varchar(12),
  AR_MTKLASSE3 varchar(12),
  AR_FRWWW smallint DEFAULT 0,
  AR_KDRABATT varchar(1) DEFAULT 'F',
  AR_BESTAND1 numeric(15,3),
  AR_BESTAND2 numeric(15,3),
  AR_FLLFDNR integer,
  AR_CHKBESTAND varchar(1) DEFAULT 'F',
  AR_TMDRUCK smallint DEFAULT 0,
  AR_SGFKOA smallint DEFAULT 1,
  AR_SGFKOR smallint DEFAULT 0,
  AR_KDS smallint,
  AR_MATIDENTALT varchar(25),
  AR_TAFEL1ALT numeric(9,2),
  AR_TAFEL2ALT numeric(9,2),
  AR_TAFEL3ALT numeric(9,2),
  AR_INAUFTRAG numeric(15,4) DEFAULT 0,
  AR_SUMRZ numeric(15,8) DEFAULT 0,
  AR_SUMSZ numeric(15,8) DEFAULT 0,
  AR_SUMVLZ numeric(15,4) DEFAULT 0,
  AR_SUMAG integer DEFAULT 1,
  AR_VERPREIS numeric(15,4),
  AR_PINDEX varchar(12),
  AR_FLAECHE numeric(15,4),
  AR_GAS numeric(15,4),
  AR_RESBUFF numeric(15,3) DEFAULT 0,
  AR_ZEICHNUNGRT varchar(30),
  AR_ZINDEXRT varchar(12),
  AR_PINDEXRT varchar(12),
  AR_FRINDEX varchar(20),
  AR_SPERRBESTAND numeric(15,3) DEFAULT 0,
  AR_GASART varchar(10) DEFAULT '',
  AR_GASZEIT numeric(15,4) DEFAULT 0,
  AR_WTNUMMER varchar(5),
  AR_LAGER varchar(1) DEFAULT 'F',
  AR_KONTIERUNG varchar(1) DEFAULT 'F',
  AR_KONTO1 varchar(7),
  AR_KONTO2 varchar(7),
  AR_KONTO3 varchar(7),
  AR_KONTO4 varchar(7),
  AR_EKONTO1 varchar(7),
  AR_EKONTO2 varchar(7),
  AR_EKONTO3 varchar(7),
  AR_EKONTO4 varchar(7),
  AR_PRUEFBERICHT varchar(1) DEFAULT 'F',
  AR_RALNUMMER varchar(20),
  AR_ZFE varchar(3),
  AR_WGNR varchar(10),
  AR_EINSATZGEWICHT numeric(15,4),
  AR_EINSATZLAENGE numeric(15,4),
  AR_VBASIS integer,
  AR_VKALKNR varchar(20),
  AR_VNUTZER varchar(20),
  AR_VZEIT timestamp,
  AR_NEUTEIL smallint DEFAULT 0,
  AR_PSPGEANDERT timestamp,
  AR_PSPSTATUS integer,
  AR_FERTSTATUS integer,
  AR_IDNR3 varchar(30),
  AR_CHARRE integer DEFAULT 0,
  AR_LPREIS numeric(15,4),
  AR_LPREISDK numeric(15,4),
  AR_PREISINFO varchar(120),
  AR_PAKANZ integer,
  AR_NOINTPOL smallint DEFAULT 0,
  AR_STATWARENNR varchar(11),
  AR_DPREIS numeric(15,4),
  AR_MINPREIS numeric(15,4),
  AR_MAXPREIS numeric(15,4),
  AR_URSPRKNZ varchar(2),
  AR_HRSTLFDNR integer,
  AR_HRSTKBEZ varchar(30),
  AR_GEFKLASSE varchar(10),
  AR_VPEINHEIT varchar(10),
  AR_KATEGORIE integer,
  AR_HRSTNUMMER varchar(60),
  AR_ARAGEWICHT numeric(15,4),
  AR_RAL4 integer,
  AR_KALKART smallint DEFAULT 0,
  AR_PILFDNR integer,
  AR_HOLAENGE numeric(15,2),
  AR_HOBREITE numeric(15,2),
  AR_HOSTAERKE numeric(15,2),
  AR_HOLAENGE1 numeric(15,2),
  AR_HOLAENGE2 numeric(15,2),
  AR_EXTERNNR varchar(50),
  AR_VPMASSEEINHEIT varchar(8),
  AR_PROFIL varchar(2),
  AR_SGFANF smallint,
  AR_REVERSECHARGE smallint DEFAULT 0,
  NUTZERID varchar(20),
  GEANDERT timestamp,
  ANLNUTZERID varchar(20),
  ANGELEGT timestamp,
  CONSTRAINT INTEG_7 PRIMARY KEY (AR_NUMMER),
  CONSTRAINT UNQ_AR_LFDNR UNIQUE (AR_LFDNR)
);
ALTER TABLE ARTIKEL ADD CONSTRAINT FK_AR_AG_AG
  FOREIGN KEY (AR_AG) REFERENCES AG (AG_AG) ON UPDATE CASCADE ON DELETE SET NULL;
ALTER TABLE ARTIKEL ADD CONSTRAINT FK_AR_PILFDNR
  FOREIGN KEY (AR_PILFDNR) REFERENCES PIKTOGRAMME (PI_LFDNR) ON UPDATE CASCADE ON DELETE SET NULL;
CREATE INDEX AR_BEZEICHNUNG ON ARTIKEL (AR_BEZEICHNUNG);
CREATE INDEX AR_BEZEICHNUNG_NUMMER ON ARTIKEL (AR_BEZEICHNUNG,AR_NUMMER);
CREATE INDEX IDX_AR_BEZEICHNUNG_UPPER ON ARTIKEL COMPUTED BY (UPPER(AR_BEZEICHNUNG));
CREATE INDEX IDX_AR_HRSTNUMMER_UPPER ON ARTIKEL COMPUTED BY (UPPER(AR_HRSTNUMMER));
CREATE INDEX IDX_AR_MATCHCODE_UPPER ON ARTIKEL COMPUTED BY (UPPER(AR_MATCHCODE));
CREATE INDEX IDX_AR_NUMMER_UPPER ON ARTIKEL COMPUTED BY (UPPER(AR_NUMMER));
CREATE INDEX IDX_AR_TVLFDNR ON ARTIKEL (AR_TVLFDNR);
GRANT SELECT
 ON ARTIKEL TO ROLE CIN_USER;
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
 ON ARTIKEL TO ROLE GFU_USER;
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
 ON ARTIKEL TO  SYSDBA WITH GRANT OPTION;
EN

回答 2

Stack Overflow用户

发布于 2017-08-28 14:41:09

对于Firebird,默认排序规则通常区分大小写。这似乎不是C# DataTable的情况(例如,参见Enable Case Sensitive when using DataTable.select)。

您需要将数据表的属性CaseSensitive设置为true。

票数 1
EN

Stack Overflow用户

发布于 2019-05-14 01:56:24

不幸的是,如果同一字符串(在字符串的开头或结尾)中存在空格,DataTable的主键会将两个不同的字符串视为同一个字符串。对于此问题,您的数据库具有不同的行为。

由于您的表的主键对其使用单个列,因此您可以通过创建一个单独的数据结构来解决此问题,该结构是一个使用Linq扩展方法"ToDictionary“的字典,并在需要时使用它来查找行。

我在这里遇到了同样的问题,而且我发现没有办法使用DataTable本身来解决这个问题。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45862157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档