C#两个类和两个表链接

C#两个类和两个表链接,c#,mysql,database,class,C#,Mysql,Database,Class,我正在做一个项目,我已经被困在一开始 我有两张桌子,上面有两门课: CREATE TABLE [dbo].[T_Artikli] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Naziv] NVARCHAR (100) NOT NULL, [Sifra] VARCHAR (13) NOT NULL, [Vp] FLOAT (53) NOT NULL, [MP] FLOAT (53)

我正在做一个项目,我已经被困在一开始 我有两张桌子,上面有两门课:

CREATE TABLE [dbo].[T_Artikli] (
[Id]       INT            IDENTITY (1, 1) NOT NULL,
[Naziv]    NVARCHAR (100) NOT NULL,
[Sifra]    VARCHAR (13)   NOT NULL,
[Vp]       FLOAT (53)     NOT NULL,
[MP]       FLOAT (53)     NOT NULL,
[Napomena] NVARCHAR (300) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

“Artikl”类和它的表“T_Artikli”工作起来很有魅力,问题在于另一个。这段代码应将值存储在表中:

private void btnSacuvaj_Click(object sender, EventArgs e)
{
    CStanje sta = new CStanje();
    sta.Trenutno = Int32.Parse(txtTrenutno.Text);
    sta.Naruceno = Int32.Parse(txtNaruceno.Text);
    sta.Firma = txtFirma.Text;
    sta.Datum = DateTime.Parse(dtDatum.Text);
    Artikl art = new Artikl();
    art.ID = Int32.Parse(cbArtikli.SelectedValue.ToString());
    sta.Artikl = art;
    Console.WriteLine(sta.Trenutno);
    Console.WriteLine(sta.Naruceno);
    Console.WriteLine(sta.Firma);
    Console.WriteLine(sta.Datum);
    Console.WriteLine(art.ID);
    sta.dodajStanje();
    indeksSelektovanog = dgStanje.Rows.Count;
}
它返回以下错误:

System.Data.dll中发生类型为“System.Data.SqlClient.SqlException”的未处理异常

其他信息:INSERT语句与外键约束“FK_T_Stanje_T_Artikli”冲突。冲突发生在数据库“C:\USERS\MORSUS\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\SEMINARSKI\expensicija\expensicija\BIN\DEBUG\expensicijadb.MDF”,表“dbo.T\u Artikli”,列“Id”中

在这一行:

public void dodajStanje()
{
    string insertSql = "INSERT INTO T_Stanje " +
        "(Trenutno, Naruceno, Datum, Firma) VALUES " +
        "(@Trenutno, @Naruceno, @Datum, @Firma)";
    using (SqlConnection connection = new SqlConnection(_connectionString))
    {
        SqlCommand command = connection.CreateCommand();
        command.CommandText = insertSql;
        //command.Parameters.Add(new SqlParameter("@Sifra", Sifra));
        command.Parameters.Add(new SqlParameter("@Trenutno", Trenutno));
        command.Parameters.Add(new SqlParameter("@Naruceno", Naruceno));
        command.Parameters.Add(new SqlParameter("@Datum", Datum));
        command.Parameters.Add(new SqlParameter("@Firma", Firma));
        connection.Open();
        command.ExecuteNonQuery(); //error
    }
}
我想我在sql中做错了什么。有人能指出我吗

关于sql的另一个问题是,为什么我的sql表只保存了一段时间,例如3-4个程序运行。数据在一段时间后被擦除,但不知道确切时间。。如果较新,则“复制到输出目录”设置为“复制”


可以自由询问更多信息。

是的,下面的限制是错误的;您将T_Stanji表的主键作为T_Artikli表的主键和外键,这是不可能发生的。注意相同列Id的两种用法

CONSTRAINT [FK_T_Stanje_T_Artikli] FOREIGN KEY ([Id]) REFERENCES [dbo].[T_Artikli] ([Id])
您需要将ArtikliID添加到T_Stanje表中:

[ArtikliID] INT (NULL | NOT NULL)
然后将此约束更改为:

CONSTRAINT [FK_T_Stanje_T_Artikli] FOREIGN KEY ([ArtikliID]) REFERENCES [dbo].[T_Artikli] ([Id])

以便映射此新列的外键。

是的,下面的约束是错误的;您将T_Stanji表的主键作为T_Artikli表的主键和外键,这是不可能发生的。注意相同列Id的两种用法

CONSTRAINT [FK_T_Stanje_T_Artikli] FOREIGN KEY ([Id]) REFERENCES [dbo].[T_Artikli] ([Id])
您需要将ArtikliID添加到T_Stanje表中:

[ArtikliID] INT (NULL | NOT NULL)
然后将此约束更改为:

CONSTRAINT [FK_T_Stanje_T_Artikli] FOREIGN KEY ([ArtikliID]) REFERENCES [dbo].[T_Artikli] ([Id])

所以这个新列的外键被映射。

所以问题出在同一个属性名中?只是为了学究,让PK也是FK在1:1关系中是有效的;两者都是身份问题。只有“家长”才应该使用标识。是的,true@uuerdo,很好。根据描述,我认为情况可能不是这样,但可能是这样。@Morsus是的,通常您希望只为外键创建一列,并在链接中使用该列-这就是当前出现错误的原因。这是一对一关系还是一对多关系?所以问题是在同一个属性名中?只是为了学究,让PK也成为FK在1:1关系中有效;两者都是身份问题。只有“家长”才应该使用标识。是的,true@uuerdo,很好。根据描述,我认为情况可能不是这样,但可能是这样。@Morsus是的,通常您希望只为外键创建一列,并在链接中使用该列-这就是当前出现错误的原因。这是一对一还是一对多的关系?