【发布时间】:2021-04-09 19:33:10
【问题描述】:
CREATE TABLE Thesis
(
ThesisNo numeric(8,0) NOT NULL,
AuthorID int NOT NULL,
EnstituteID int NOT NULL,
SupervisorID int NOT NULL,
Title nvarchar(100)NOT NULL,
Abstract nvarchar(500)NOT NULL,
Pages int NOT NULL,
SumbitDate datetime NOT NULL,
[Type] nchar(30) NOT NULL,
[Language] nchar(20) NOT NULL,
PRIMARY KEY (ThesisNo),
FOREIGN KEY (EnstituteID) REFERENCES Enstitute(EnstituteID),
FOREIGN KEY (AuthorID) REFERENCES Author(AuthorID),
FOREIGN KEY (SupervisorID) REFERENCES Supervisor(SupervisorID)
)
CREATE TABLE Person
(
PersonID int NOT NULL,
PersonFullName nvarchar(70) NOT NULL,
PRIMARY KEY (PersonID)
)
我使用用 C# 编写的 Windows 窗体应用程序。
我将作者作为字符串,但是在为论文添加外键时,我需要添加该作者的主键,以便我可以访问联系人表并找到该人。如何找出输入的人名的主键是什么?
string query = "INSERT INTO Thesis (AuthorID,EnstituteID,SupervisorID,CoSupervisorID,Title,Abstract,Pages,SubmitDate,Type,Language)" +
"VALUES (@author,@enstitute,@supervisor,@cosupervisor,@title,@abstract,@pages,@submitdate,@type,@language) ";
AuthorID 或其他 ID 成员是 int 和外键但输入的值是字符串 @author @enstitute, @supervisor, @cosupervisor
【问题讨论】:
-
您需要执行另一个查询以根据名称检索 id。您可以在保存论文之前在 c# 中执行此操作。您可以将主键查询作为“插入”语句的一部分进行,但我建议在 c# 应用程序中进行,以明确创建论文的依赖项。
-
ThesisNo/PersonID是 IDENTITY 列吗?如果是这样,docs.microsoft.com/en-us/sql/t-sql/functions/… . -
您的问题主要与您的应用程序和您用来允许人们输入此信息的 GUI 有关。通常使用某种下拉列表来选择与 FK 列对应的值。无论哪种方式,您都需要检索与输入的“字符串”关联的 ID。有点奇怪,您为 Person 显示 DDL,但没有为任何实际的 FK 表显示 DDL。也许您需要有关编写有效应用程序及其 GUI 的指导?
-
我不知道您为什么使用相同的旧技术,现在您可以使用像 EntityFrame Work 这样的 ORM。
标签: c# sql-server database windows-forms-designer