2013-12-11 2 views
0

Я получаю исключительную ошибку 'недопустимое имя столбца'SQL Server Недопустимое исключение имени столбца

но если используется целое число при вставке принимается.

пожалуйста, помогите я новичок в VB .NET

Вот код

Imports System 
Imports System.Data 
Imports System.Data.SqlClient 


Public Class Student 
    Dim cs As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Example\Student.mdf;Integrated Security=True;User Instance=True") 
    Dim cmd As New SqlCommand 
    Dim dr As SqlDataReader 
    Private Sub Student_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     'TODO: This line of code loads data into the 'StudentDataSet1.Student' table. You can move, or remove it, as needed. 
     Me.StudentTableAdapter1.Fill(Me.StudentDataSet1.Student) 
     'TODO: This line of code loads data into the 'StudentDataSet.Student' table. You can move, or remove it, as needed. 
     Me.StudentTableAdapter.Fill(Me.StudentDataSet.Student) 
     cmd.Connection = cs 
    End Sub 

    Private Sub StudentBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StudentBindingNavigatorSaveItem.Click 
     Me.Validate() 
     Me.StudentBindingSource.EndEdit() 
     Me.TableAdapterManager.UpdateAll(Me.StudentDataSet) 
    End Sub 

    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click 
     StudentBindingSource.AddNew() 
     USNTextBox.Focus() 
    End Sub 

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 
     Try 
      Me.Validate() 
      Me.StudentBindingSource.EndEdit() 
      Me.TableAdapterManager.UpdateAll(Me.StudentDataSet) 
      MsgBox("1 record is added") 
     Catch ex As Exception 
      System.Windows.Forms.MessageBox.Show(ex.Message) 
     End Try 
    End Sub 
    Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click 
     If USNTextBox.Text <> "" And NameTextBox.Text <> "" And MarksTextBox.Text <> "" Then 
      cs.Open() 
      cmd.CommandText = "INSERT INTO Student" & "(USN, Name, Marks)" & "VALUES (" & USNTextBox.Text & ", " & NameTextBox.Text & ", " & MarksTextBox.Text & ")" 
      cmd.ExecuteNonQuery() 
      cs.Close() 

      USNTextBox.Text = "" 
      NameTextBox.Text = "" 
      MarksTextBox.Text = "" 
     End If 
    End Sub 

End Class 
+2

Try и отобразить команду SQL вы собираетесь выполнить и посмотрите, где это неправильно. Вы можете предотвратить эту проблему (и многое другое!) С помощью параметров. –

ответ

4

Вам нужно обернуть текстовые столбцы в одинарные кавычки. Тем не менее, вы всегда должны использовать параметризованные запросы в любом случае, чтобы предотвратить SQL-инъекцию.

Таким образом, вместо

cmd.CommandText = "INSERT INTO Student" & "(USN, Name, Marks)" & "VALUES (" & USNTextBox.Text & ", " & NameTextBox.Text & ", " & MarksTextBox.Text & ")" 

это:

Dim sql = "INSERT INTO Student(USN, Name, Marks)VALUES(@USN, @Name, @Marks)" 
Using cs = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Example\Student.mdf;Integrated Security=True;User Instance=True") 
    Using cmd = New SqlCommand(sql, cs) 
     cmd.Parameters.AddWithValue("@USN", USNTextBox.Text) 
     cmd.Parameters.AddWithValue("@Name", NameTextBox.Text) 
     cmd.Parameters.AddWithValue("@Marks", Int32.Parse(MarksTextBox.Text)) 
     cs.Open() 
     cmd.ExecuteNonQuery() 
    End Using 
End Using 

(при условии, что Marks является int столбец, в противном случае удалить Int32.Parse)

+0

Теперь его работа с Gridview. Но его не хранить в базе данных – Rohit

+0

@ user3091691: Что это значит? Что работает в «GridView» и что не работает в базе данных? Вы получаете исключение? –

+0

@ Тим: Исключений нет. Когда вставка выполняется, значения сохраняются и отображаются на экране сетки. Но не сохраняются в бэкэнд-базе данных. – Rohit

0

Параметры ответ Tim является правильным решением

Но это, как вы бы процитировать Имя
Если это символ или NCHAR оно должно быть заключено в кавычки
Это открывает вам до SQL инъекций атаки

cmd.CommandText = "INSERT INTO Student" & "(USN, Name, Marks)" & "VALUES (" & USNTextBox.Text & ", '" & NameTextBox.Text & "', " & MarksTextBox.Text & ")" 
Смежные вопросы