【发布时间】:2023-04-05 21:19:02
【问题描述】:
我有关系数据库。每个学生都有不同的历史(一对多)。数据是正确的,但这里的问题是在datagridview 中加载时学生信息变得重复。我使用DISTINCT 函数但它不起作用。有人可以帮我弄清楚我的代码有什么问题。
加载时的vb.net代码
Using cmd As New SqlClient.SqlCommand("dbo.uspSELECTALL", cn)
da.SelectCommand = cmd
dt.Clear()
da.Fill(dt)
dgv1.RowTemplate.Height = 50
dgv1.DataSource = dt
For i As Integer = 0 To dgv1.Columns.Count - 1
If TypeOf dgv1.Columns(i) Is DataGridViewImageColumn Then
DirectCast(dgv1.Columns(i), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Stretch
End If
Next
End Using
存储过程代码
ALTER PROCEDURE [dbo].[uspSELECTALL]
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT SI.StudentID,SI.Surname,SI.FirstName,SI.MiddleName, SI.StudAddress ,
SI.BirthDay,SI.Gender, SI.Nationality, SI.BirthPlace,
SI.TelNum,SI.SchoolWhereGraduated ,
SI.DatesWhenGraduated, SI.SchoolLastAttended,
SI.Note,SI.StudImage,
PI.Father_FirstName,PI.Father_LastName,
PI.Father_MI,PI.Father_Occupation,
PI.Father_TelNUm, PI.Mother_FirstName, PI.Mother_LastName,
PI.Mother_MI,PI.Mother_Occupation,PI.Mother_TelNum,
PI.Contact_FirstName,PI.Contact_LastName,PI.Contact_MI,
PI.Contact_Mobile,PI.Contact_TelNum,PI.Contact_Address,
SH.SchoolYear,SH.Levels,SH.Section,SH.DateEnrolled
FROM StudentInformation SI
JOIN StudentHistory SH
ON SI.StudentID = SH.StudentID
JOIN ParentInformation PI
ON PI.ParentID = SI.ParentID
END
【问题讨论】:
-
您是否有多个父母信息行?如果您直接对数据库运行此 sql,您会看到重复项吗?
-
运行到sql server时,数据是正确的并显示这个SQL SERVER,但是当我加载到
datagridview时,它有一个重复的记录。但是,仅当一个学生在 studentHistory 表中有很多历史记录时才会发生此问题 -
dt在将其加载到 datagridview 之前是否具有预期的行数? -
你的意思是,你想输出多个不同的历史,只有一个不重复的学生 ID?
-
@Cyval 是的,这就是我想要做的。我只希望在加载时不重复的学生 ID 在
GridView中显示。
标签: sql-server vb.net sql-server-2008 datagridview