我有一个表文档,其中有3个其他表的外键。该表文档应包含不同主题(玻璃,飞机和项目)的文档。我不想创建3个表(玻璃文档表,飞机文档的另一个表等)所以我创建了一个表,它将有一个参考(外键)到其他表(玻璃,飞机和项目表) )。首先,我不确定这是否是一个很好的解决方案...
无论如何,问题如下:我想插入涉及玻璃的文件。这意味着Aircraft和Project的外键将为null。数据库列接受空值。 如果我尝试为这些外键(AircraftFK和ProjectFK)插入空值,则不允许我这样做。它要求我为tabel Aircraft and Project中已存在的主键插入适当的外键值。
这些外键(AircraftfK和ProjectFK)必须为空,因为我插入的文件与飞机和项目无关。
我正在用c#编程并使用Sql Server 2008。
我该如何解决这个问题?
谢谢大家
以下是一些更多信息:
这是我的sql命令:
komanda = new SqlCommand("insert into Documentation (GlassFK, FaiFK, ProjectOrderFK, OrderNumberFK, DocPath, DocName, DocSize, DocType, DocumentFile) values (@GlassFK, @FaiFK, @ProjectOrderFK, @OrderNumberFK, @DocPath, @DocName, @DocSize, @DocType, @DocumentFile)", konekcija);
for (int i = 0; i < listaDokumenata.Count; i++)
{
komanda.Parameters.Clear();
komanda.Parameters.AddWithValue("@GlassFK", listaDokumenata[i].GlassFK);
komanda.Parameters.AddWithValue("@FaiFK", listaDokumenata[i].FaiFK);
komanda.Parameters.AddWithValue("@ProjectOrderFK", listaDokumenata[i].ProjectOrderFK);
komanda.Parameters.AddWithValue("@OrderNumberFK", listaDokumenata[i].OrderNumberFK);
komanda.Parameters.AddWithValue("@DocPath", listaDokumenata[i].PutanjaFajla);
komanda.Parameters.AddWithValue("@DocName", listaDokumenata[i].ImeFajla);
komanda.Parameters.AddWithValue("@DocSize", listaDokumenata[i].VelicinaFajla);
komanda.Parameters.AddWithValue("@DocType", listaDokumenata[i].Ekstenzija);
komanda.Parameters.AddWithValue("@DocumentFile", listaDokumenata[i].Fajl);
这里是用于创建文档对象的c#代码:
Document sf = new Document();
sf.PutanjaFajla = putanjaFajla;
sf.ImeFajla = imeFajla;
sf.Ekstenzija = ekstenzija;
sf.VelicinaFajla = velicinaFajla;
sf.Fajl = wordFile;
sf.FaiFK = 5;
sf.GlassFK = 0;
sf.ProjectFK = null;
sf.ProjectOrderFK = 0;
这意味着本文档将引用Glass。所有其他外键必须为0或null(取决于sql中的属性类型)
所以,这是我得到的错误:
参数化查询'(@ GlassFK int,@ FaiFK int,@ ProjectOrderFK int,@ OrderNumberFK nvar'需要参数'@OrderNumberFK',这是未提供的。
OrderNumberID是表Project的主键。它的外键是OrderNumberFK