用VB.NET实现sqldelete查询

用VB.NET实现sqldelete查询,.net,vb.net,.net,Vb.net,我在VB.NET中结合SQL server数据库表编写了一个程序来记录学生的评估分数。SQL表(分数)详细列,显示学生ID、评估(如数学、科学、英语)和分数。   下面显示的子例程旨在允许用户删除特定的评估,通过使用嵌套在条件if/elseif子句中的delete语句,我已经成功地实现了这一点,程序运行良好。然而,作为编程的新手,我意识到要采用良好的实践,如果可能的话,要避免重复的代码,在我看来,这在if/elseif条款中是显而易见的。当考虑到必须处理15个或更多学生评估的可能性时,这个问题变

我在VB.NET中结合SQL server数据库表编写了一个程序来记录学生的评估分数。SQL表(分数)详细列,显示学生ID、评估(如数学、科学、英语)和分数。   下面显示的子例程旨在允许用户删除特定的评估,通过使用嵌套在条件if/elseif子句中的delete语句,我已经成功地实现了这一点,程序运行良好。然而,作为编程的新手,我意识到要采用良好的实践,如果可能的话,要避免重复的代码,在我看来,这在if/elseif条款中是显而易见的。当考虑到必须处理15个或更多学生评估的可能性时,这个问题变得越来越重要。   我的问题是,是否可以修改SQL查询语句以合并“assessment”变量,而不是在if/elseif子句中显式键入每个条件?我尝试以与使用变量“id”在SQL查询语句中标识“Student_id”相同的方式来执行此操作,但这返回了一个错误,例如,数学不是列。   希望我已经充分解释了这一点,一切都有意义。 如往常一样,任何想法都是最受欢迎的。

谢谢,迈克

   Console.WriteLine("")
    Console.Write("Enter assessment to be deleted : ")
    Dim assessment_name As String = Console.ReadLine

    If assessment_name = "Maths" Then
        query = ("DELETE FROM Marks WHERE Assessment='Maths' AND Student_ID=" & id)
    ElseIf assessment_name = "English" Then
        query = ("DELETE FROM Marks WHERE Assessment='English' AND Student_ID=" & id)
    ElseIf assessment_name = "Science" Then
        query = ("DELETE FROM Marks WHERE Assessment='Science' AND Student_ID=" & id)
    ElseIf assessment_name = "Art" Then
        query = ("DELETE FROM Marks WHERE Assessment='Art' AND Student_ID=" & id)
    End If

    command = New SqlCommand(query, connection)
    command.ExecuteNonQuery()

我想你可以像下面这样做

可以使用参数轻松创建查询

您可以使用
USING
块,以便于处理

Public Sub DeleteNote(ByVal评估为字符串,ByVal Studentid为整数)
'使用语句以便于处理
将连接用作新的SqlConnection(connectionString)_
命令作为新的SqlCommand(“从标记中删除,其中Assessment=@Assessment和Student_ID=@Studentid”,连接)
'添加参数
command.Parameters.AddWithValue(“@assessment”,assessment)
command.Parameters.AddWithValue(“@Studentid”,Studentid)
'打开连接
connection.Open()
'执行查询
将读取器用作SqlDataReader=command.ExecuteReader()
而reader.Read()
'读取查询结果
Console.WriteLine(String.Format(“{0},{1}”),
读卡器(0),读卡器(1)))
结束时
终端使用
终端使用
端接头

侧注;研究使用参数而不是字符串连接。另外,考虑使用Wither参数实现
,可以将
WHERE
子句重构为
WHERE Assessment=@Assessment和Student_ID=@ID。除了参数化查询的其他好处外,这将允许您使用单个查询。感谢您的帮助。我在计算如何声明评估和id的参数时遇到了一点问题,但最终我做到了。像那样清除连接池是非常糟糕的做法。它会中断池中内置的连接重用功能。通常,最好让异常冒泡到更高的抽象级别。返回代码增加了对应用程序没有帮助的复杂性。。。它们往往被忽略,并隐藏有关错误的详细信息。我还清理了一些其他东西。@JoelCoehoorn你错过了
评估=“@Assessment”
:)@JoelCoehoorn我想这取决于我的程序,因为有大量的sql集成测试,我无法读取文件的字节等,只要连接打开,只要池保持文件打开。@ScottChamberlain谢谢,我没有注意到,因为我没有使用IDE,哈哈,实际上我有它们,但有人编辑了它们out@Mederic您可以通过单击链接查看;)来查看是谁编辑了它们