ユーザーが入力したデータをフォームビューから取り出し、データベースのテーブルに挿入しようとしています 問題は、コンパイラがRtype変数に達するとその値を保存するには、私にこのエラーが表示されます: エラーの意味を知っていますが、私はそれを動作させることができません。 次はクラスで私のコードは、Form1のデータベースにデータを挿入する(sqlexception)
Imports System.Data.SqlClient
Public Class Form1`
Private Sub newBtn_Click(sender As Object, e As EventArgs) Handles BtnNwRoom.Click
Dim obj As New Hotl()
Dim selectedItem As Object
selectedItem = hotelCombobox.SelectedItem()
If (obj.addnew(CInt(Me.roomNum.Text), CInt(selectedItem), Me.roomType.Text, Me.price.Text) = False) Then
MsgBox(" no record is added, Try again later")
End If
End Sub
End class
これは、新しい関数を追加です:ティムが言ったように、代わりにパラメータ化クエリを使用する
Public Function addnew(ByVal roomNo As Integer, ByVal hotelNo As String, ByVal RoomType As String, ByVal price As Integer) As Boolean
Dim sqlstmnt = "insert into Room (roomNo,hotelNo,RoomType,price) values(" & roomNo & " , " & hotelNo & " , " & RoomType & " , " & price & ")"
MsgBox(sqlstmnt)
conn = ConNew()
'''''''''''''''''''''''''''''' Execute Reader
''''''''''''''''''''''''''''''''''''''''''''''
Dim command As New SqlCommand(sqlstmnt, conn)
If command.ExecuteNonQuery() = 1 Then
MessageBox.Show("insertion Succeded")
Return True
Else
Return False
End If
End Function
SQLパラメータを使用すると、おそらくこの問題が解決され、SQLインジェクションの固有の脆弱性がさらに重要になります。 –
テーブル「ルーム」の列は何ですか? –
あなたの値の1つは "big"というテキストですが、シングルクォートでテキスト値を折り返しているわけではないので、列名として解釈されるため、その列名が無効であると伝えられます。あなたは単なる引用符をあなたのSQLの適切な場所に置くことができますが、それはバンドードメジャーです。 @TimSchmelterが示唆するように、パラメータで適切に実行してください。こちらをご覧ください:http://jmcilhinney.blogspot.com.au/2009/08/using-parameters-in-adonet.html – jmcilhinney