2014-04-04 51 views
0

我有vb.net應用程序窗體。 它包含ID,年齡,名稱作爲文本框和TC作爲複選框。 我對這些項目有以下代碼,但複選框項目會自動保存,無論是否選中。 那麼該怎麼辦?將CheckBox項目保存到數據庫訪問

[Imports System.Data.OleDb 
Imports System.Data 
Public Class Form1 
    Dim con As New OleDbConnection 
    Dim cmd As New OleDbCommand 
    Dim con_str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Satyam\Documents\Database2.accdb" 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Try 
     con.ConnectionString = con_str 
     con.Open() 
     'MsgBox(con.State) 

     Dim myReader As OleDbDataReader 
     cmd = New OleDbCommand("select * from Table1", con) 
     myReader = cmd.ExecuteReader 
     While myReader.Read() 

     End While 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
     con.Close() 

    End Try 
End Sub 

Private Sub AddTable1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddTable1.Click 
    Try 
     con.ConnectionString = con_str 
     con.Open() 
     'MsgBox(con.State) 

     cmd = New OleDbCommand("insert into Table1(ID,Age,Name,TC) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','" & Nametxt.Text & "','" & TCtxt.Text & "')", con) 
     cmd.ExecuteNonQuery() 
     MsgBox("Added Successfuly") 

     Dim myReader As OleDbDataReader 
     cmd = New OleDbCommand("select * from Table1", con) 
     myReader = cmd.ExecuteReader 
     Agetxt.Clear() 

     While myReader.Read() 

     End While 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
     con.Close() 

    End Try 

End Sub 

末級

+0

總是使用參數來避免SQL注入。像這樣連接你的sql字符串會給你帶來麻煩。 – LarsTech

回答

0

檢查這個代碼。這是3複選框。你可以擴展它10個複選框。 看看這裏:

Dim hbStr As String 
    Dim bgStr As String 
    Dim tcStr As String 

    If hb.Checked Then 
     hbStr = hb.Text 
    Else 
     hbStr = "" 
    End If 

    If bg.Checked Then 
     bgStr = bg.Text 
    Else 
     bgStr = "" 
    End If 

    If tc.Checked Then 
     tcStr = tc.Text 
    Else 
     tcStr = "" 
    End If 

    Dim cmd As New OleDbCommand 
    Dim conn As New OleDbConnection("Connection String") 
    conn.Open() 
    cmd.Connection = conn 
    cmd.CommandType = CommandType.Text 
    cmd.CommandText = "insert into Table1(ID,Age,Name,TC,HB.BG) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','" & Nametxt.Text & "','" & tcStr & "','" & hbStr & "','" & bgStr & "')" 
    cmd.ExecuteNonQuery() 

希望這可以幫助你。

+0

好吧,我知道了,它工作。 – user3287723

+0

還有一件事 - 如果不選擇任何複選框,那麼db中的相應列將是空的。 – user3287723

+0

雅如果你希望它是空的只是通過這種方式傳遞的價值。 'cmd = New OleDbCommand(「插入到Table1(ID,年齡,名稱,TC)值(''&IDtxt.Text&」','「&Agetxt.Text&」','「&Nametxt.Text& ','')「,con)'只需在單引號中傳遞空字符串' 只要確保該字段在數據庫中不是」NOT NULL「。 如果有幫助請標記答案。:) –

0

對不起,它只保存TC不是Hb。

If Hbtxt.Checked Then 
    cmd = New OleDbCommand("insert into Table1(ID,Age,Hb) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','" & Hbtxt.Text & "')", con) 
Else 
    cmd = New OleDbCommand("insert into Table1(ID,Age,Hb,) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','')", con) 
End If 

If TCtxt.Checked Then 
    cmd = New OleDbCommand("insert into Table1(ID,Age,TC) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','" & TCtxt.Text & "')", con) 
Else 
    cmd = New OleDbCommand("insert into Table1(ID,Age,TC) values ('" & IDtxt.Text & "','" & Agetxt.Text & "','')", con) 
End If 
+0

我試過這段代碼,但我得到了一個查詢 - Dim con As New OleDbConnection(「Connection String」) - 初始化字符串的格式不符合從索引0開始的規範。(Argumentexception未處理) – user3287723