【发布时间】:2017-07-21 01:43:24
【问题描述】:
我在如何使用 datagridview 和存储过程更新我的表时遇到问题。这是代码;
Private Sub INPUTGrades()
Dim strConn As String = "Data Source=Jansen;Initial Catalog=SLCBRegistrarDB;Integrated Security=True"
Dim sqlCon As SqlConnection = New SqlConnection(strConn)
CMD = New SqlCommand
CMD.Connection = sqlCon
CMD.CommandText = "PostingofGRADE"
CMD.CommandType = CommandType.StoredProcedure
CMD.Parameters.AddWithValue("@AcademicYear", cmbAcademicYear.Text)
CMD.Parameters.AddWithValue("@Period", cmbPeriod.Text)
CMD.Parameters.AddWithValue("@Section", cmbSection.Text)
CMD.Parameters.AddWithValue("@CourseCode", cmbSubjectCode.Text)
CMD.Parameters.AddWithValue("@DescriptiveTitle", cmbDescription.Text)
CMD.Parameters.AddWithValue("@AcademicLevel", cmbAcadLevel.Text)
CMD.Parameters.Add(New SqlParameter("@StudentID", SqlDbType.Int))
CMD.Parameters.Add(New SqlParameter("@Grade", SqlDbType.NVarChar))
sqlCon.Open()
For Each row As DataGridViewRow In dgvSubjectsEntry.Rows
If Not row.IsNewRow Then
CMD.Parameters("@StudentID").Value = row.Cells(1).Value
CMD.Parameters("@Grade").Value = row.Cells(0).Value
Dim RowsAffected As Integer = CMD.ExecuteNonQuery()
If RowsAffected > 0 Then
MsgBox("Grade Successfully Posted.")
Else
MsgBox("Failed!")
End If
End If
Next
sqlCon.Close()
End Sub
这是存储过程:
USE [SLCBRegistrarDB]
GO
/****** Object: StoredProcedure [dbo].[PostingofGRADE] Script Date:
7/21/2017 9:38:16 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[PostingofGRADE]
@StudentID Int,
@AcademicYear nvarchar(50),
@Period nvarchar(50),
@Section nvarchar(10),
@CourseCode nvarchar(50),
@DescriptiveTitle nvarchar(100),
@Grade nvarchar(50),
@AcademicLevel nvarchar(50)
AS
BEGIN
Declare @AcademicLevelID int
Declare @SchoolID int
Declare @TypeofStudentID int
Declare @CourseID int
Declare @PeriodID int
Declare @AcademicYearID int
Declare @SectionID int
Declare @SubjectCode int
SELECT @AcademicLevelID=AcadLevelID FROM [Academic Level] WHERE
[Academic Level]=@AcademicLevel
SELECT @PeriodID=SemID FROM SemesterList WHERE Description=@Period
SELECT @SectionID=SectionID FROM Section WHERE Section=@Section
SELECT @AcademicYearID=[SY ID] FROM SchoolYear WHERE [School Year]=@AcademicYear
SELECT @SubjectCode=StudentAcademicRecords.[Subject Code]
FROM StudentAcademicRecords INNER JOIN
[Class Schedule LINE] ON StudentAcademicRecords.[Subject Code] =
[Class Schedule LINE].SchedID INNER JOIN
Curriculum ON [Class Schedule LINE].[Subject Code] = Curriculum.
[Subject Code] INNER JOIN
ListofSubjects ON Curriculum.SubjectID = ListofSubjects.SubjectID
INNER JOIN
SchoolYear ON StudentAcademicRecords.[Academic Year] = SchoolYear.
[SY ID] INNER JOIN
SemesterList ON StudentAcademicRecords.Period = SemesterList.SemID
AND Curriculum.SemesterID = SemesterList.SemID
WHERE (ListofSubjects.[Course No.] = @CourseCode) AND
(ListofSubjects.[Descriptive Title] = @DescriptiveTitle) AND
(StudentAcademicRecords.StudentID = @StudentID) AND
(SemesterList.Description = @Period) AND (SchoolYear.[School Year] =
@AcademicYear)
BEGIN
UPDATE StudentAcademicRecords
SET StudentID =@StudentID, [Academic Level] =@AcademicLevelID, Period
=@PeriodID, [Academic Year] =@AcademicYearID, Section =@SectionID, [Subject
Code] =@SubjectCode, Grade =@Grade
FROM StudentAcademicRecords
WHERE [Subject Code]=@SubjectCode AND StudentID=@StudentID
END
END
如果我尝试运行代码,则表没有任何反应。完全没有变化。我尝试在 sql server 查询中运行,它工作正常,但在我的 vb.net 代码中,它没有。
感谢任何帮助。
【问题讨论】:
-
If Not row.IsNewRow Then 只有在没有为网格行输入数据的情况下才会为真条件。不确定这是否是导致您的命令无法执行的原因。
-
我不知道是什么导致了这个问题。他们有什么方法可以做到这一点..?
-
当您致电
ExecuteNonQuery时,会发生以下三种情况之一。首先,调用可能成功并返回一个大于零的值,这意味着许多记录受到影响。其次,调用可能成功返回0,即SQL执行成功,但没有记录受到影响。最后,调用可能会失败并抛出异常。你的情况是哪一个?如果是第一个,那么您正在保存更改,而您只是没有正确查找它们。如果是其他问题之一,那么您需要解决数据或 SQL 代码的问题。 -
如果我在 sql server 查询中运行存储过程并在其上添加值,它工作正常,这意味着我要更新的表中的某些行工作正常..但如果我称之为存储使用 vb.net 代码在 Visual Studio 中的过程并运行代码,它可以工作,但问题是,表中没有更新任何行。
标签: sql vb.net sql-server-2012