2016-04-08 14 views
0

auf Ich machte VB.NET und verwenden Sie es, um meine SQL-Datenbank zu verbinden.
Im Moment möchte ich die Daten in der Datenbank einzufügen, doch nachdem ich meinen Code beenden kommt es diesen Fehler aus:Ausnahme tritt in VB.NET Code

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Was es bedeutet und was mache ich in meinem Code falsch?

Hier ist mein Code:

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 

Meine Form wie folgt aussieht:

Database Table

+5

Nicht die Verwendung von Parametern wird Ihnen dies zusammen mit SQL-Injektion Probleme tun. Angenommen SelectedValue ist nicht null ist auch ein Problem. Es ist WERTE, nicht WERT. Es ist immer sicherer, die Feldliste mit der Werteliste zu vergleichen. – LarsTech

+0

[Studentenregistrierung] (http://stackoverflow.com/q/332365/11683), das ist ... – GSerg

+0

@LarsTech Oh, es funktioniert !!! Ich danke dir sehr !!! –

Antwort

2

Sie gehen:

Add New Form

Meine Datenbank sieht wie folgt aus um Dinge in die Luft zu jagen Du gehst so vor, wie du aufgelistet bist. Was Sie tun müssen, ist die Abfrage in irgendeiner Weise zu parametrisieren - am einfachsten wäre es, eine gespeicherte Prozedur mit benannten Parametern zu erstellen. Ich sage, das wird in die Luft gehen, weil Sie nicht den Fall berücksichtigen, in dem jemand einen Apostroph enthält (und Sie können mir nicht sagen, dass Sie keine O'Shannon oder so etwas haben), noch berücksichtigen Sie, wenn ein Student bereits registriert ist . Etwas an diesem Studenten muss sie einzigartig machen - vielleicht, Sozialversicherungsnummer? Welche nehme ich an, dass Sie während der Registrierung haben werden?

An diesem Punkt Sie so etwas wie tun könnte:

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 

Mit dieser gespeicherten Prozedur vorhanden, würden Sie dann in der Lage sein, diese Parameter zu binden, und Sie würden nicht an jemand böswillig anfällig Eingabe Daten, noch würden Sie umfallen, wenn Sie den ersten Namen mit einem Apostroph darin erhalten.

Offensichtlich müssten Sie dann an die gespeicherte Prozedur binden, was bedeuten würde, Parameter & zu setzen, die ihre Werte setzen. Aber Sie wären besser in Form und nicht anfällig für das Little Bobby Tables Problem.

+0

Wow, vielen Dank an Sie !!! –