VB.NET代码中出现异常

时间:2016-04-08 20:48:12

标签: sql database vb.net

我在做VB.NET并用它来连接我的SQL数据库 现在我想将数据插入到我的数据库中,但在我完成代码之后出现了这个错误:

  

类型' System.Data.SqlClient.SqlException'的第一次机会异常。发生在System.Data.dll

在我的代码中它意味着什么以及我做错了什么?

这是我的代码:

Imports System.Data.SqlClient
Public Class AddNew
Public con As New SqlConnection("Data Source=localhost;Initial Catalog=Tuition_Information;Integrated Security=True")
Public cmd As New Data.SqlClient.SqlCommand

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        cmd.CommandType = System.Data.CommandType.Text
        cmd.CommandText = "Insert Into Student_Info Value ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & ComboBox1.SelectedValue & "','" & ComboBox2.SelectedValue & "','" & TextBox7.Text & "','" & TextBox8.Text & "')"
        cmd.Connection = con
        con.Open()
        cmd.ExecuteNonQuery()
        MsgBox("New Student Added", MsgBoxStyle.Information, "add")

    Catch ex As Exception
        MessageBox.Show("Error occured, please try again.")
    End Try

End Sub

我的表格如下:

Add New Form

我的数据库看起来像这样:

Database Table

1 个答案:

答案 0 :(得分:2)

如果你按照上市的方式去做,你会把事情搞砸。您需要做的是以某种方式参数化查询 - 最简单的方法是创建具有命名参数的存储过程。我说这会爆炸,因为你没有考虑到某个人的名字包含撇号的情况(你不能告诉我你不会有O'Shannon或者其他东西),也不会说明学生已经注册。关于那个学生的一些事情必须让他们与众不同 - 比如,社会安全号码?我认为你在注册期间会有什么?

此时,您可以执行以下操作:

create procedure SaveStudent
    @Student_Name nvarchar(128) ,
    @Home_Address nvarchar(256) ,
    @Contact_Number varchar(32) ,
    @Social_Security_Number char(11)
    ...
as

set nocount on
set rowcount 0

if exists ( select * from dbo.Students where Social_Security_Number = @Social_Security_Number )
    begin
        raiserror('Student with SSN %s already exists.', 16, 1, @Social_Security_Number) with nowait
    end
else
    begin
        insert into dbo.Students (
            Student_Name ,
            Home_Address ,
            Contact_Number ,
            Social_Security_Number ,
            ... )
        select
            @Student_Name ,
            @Home_Address ,
            @Contact_Number ,
            @Social_Security_Number ,
            ...
    end

go

grant execute on SaveStudent to WhateverApplicationUserYouAreUsing

使用该存储过程,您就可以绑定这些参数,并且您不会容易受到恶意输入数据的人的攻击,当您获得带有撇号的名字时也不会摔倒

显然,你必须绑定到存储过程,这意味着准备参数&设定他们的价值观但是你的状态会更好,而且不容易受到Little Bobby Tables问题的影响。