【发布时间】:2021-11-11 22:22:18
【问题描述】:
对于上下文,我正在使用存储在 SQL Server 中的家谱数据库。为了查看信息,我在 Visual Studio 中创建了一个 Winforms 应用程序,它允许将每个人视为一个名为 PersonForm 的表单中的记录。
PersonTable如下:
CREATE TABLE PersonTable
(
PersonID INT NOT NULL PRIMARY KEY IDENTITY (1,1),
FirstName VARCHAR(50),
LastName VARCHAR(50),
Gender BINARY,
MotherID INT,
FatherID INT,
);
我的最终目标是在表单上有一个 dataGridView 对象(称为“childOfCurrent”),该对象将显示所有列为当前查看记录的子项的人(在PersonTable 中使用自联接)。
我已使用自联接 SQL 查询成功列出所有母亲及其子女:
SELECT
C.PersonID AS ChildID,
C.FirstName AS ChildFN,
C.LastName AS ChildLN,
M.PersonID AS MotherPersonID,
M.FirstName AS MotherFN,
M.LastName AS MotherLN
FROM
PersonT C
JOIN
PersonT M ON C.MotherID = M.PersonID
ORDER BY
MotherPersonID
但是,我希望结果取决于正在查看的记录(以便仅显示“当前记录”人员的子项)。我想这可以通过引用PersonForm 中包含personID 的文本框来实现,即当前记录。但我不知道该怎么做。
我在自联接查询结束时尝试了类似访问
WHERE MotherID = Forms!PersonForm!PersonID 失败了,因为您可能无法在 T-SQL 中引用这样的对象。
是否有一些类似于 MS Access 中的内容,您可以在查询本身中引用 Forms!FormName!ObjectName 等?可能我想错了。
以防万一,这里是 c# 代码
private void SearchButton_Click_1(object sender, EventArgs e)
{
using (SqlConnection sqlCon = new SqlConnection(ConnectionString))
{
sqlCon.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter("THE SQL I PUT IN THE SECOND CODE SNIPPET", sqlCon);
DataTable dtbl = new DataTable();
sqlDA.Fill(dtbl);
childOfCurrent.DataSource = dtbl; //childOfCurrent is dataGridView object
}
}
【问题讨论】:
-
您通常创建一个参数化查询,并将表单值复制到参数中。
-
好的,谢谢@Nick.McDermaid 我会调查的
标签: sql-server winforms tsql