2016-05-31 65 views
1

最近我公司開發的POS機,但我有一個問題,插入數據,並在數據網格視圖 這裏顯示的表名是一些代碼:插入數據到MySQL,顯示在datagridveiw

Dim Query As String 
    Query = "insert into baza.artikli(barkod,naziv,kupovna,prodazna,kolicina,proizvoditel,opis) values ('" & TextBoxBarkod.Text & "','" & TextBoxNaziv.Text & "','" & kupovnacena & "','" & prodaznacena & "','" & kolicina & "','" & TextBoxProizvoditel.Text & "','" & TextBoxOpis.Text & "')" 
    COMMAND = New MySqlCommand(Query, konekcija) 
    READER = COMMAND.ExecuteReader 



    MessageBox.Show("Артиклот е успешно внесен !") 
    TextBoxBarkod.Text = "" 
    TextBoxKupovna.Text = "" 
    TextBoxNaziv.Text = "" 
    TextBoxOpis.Text = "" 
    TextBoxProdazna.Text = "" 
    TextBoxProizvoditel.Text = "" 
    TextBoxKolicina.Text = "" 
    konekcija.Close() 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
Finally 
    konekcija.Dispose() 

,我嘗試:

Private Sub prikazitabela() 

    konecija = New MySqlConnection 
    konecija.ConnectionString = 
     "server=localhost;userid=root;password=root;database=bazaartikli123" 
    Dim SDA As New MySqlDataAdapter 
    Dim bazaDataSet As New DataTable 
    Dim bajndsors As New BindingSource 

    Try 
     konecija.Open() 
     Dim Query As String 
     Query = "select barkod as 'Баркод',naziv as 'Назив на артикал',kupovna as 'Куповна цена',prodazna as 'Продажна цена',opis as'Опис',ddv as 'ДДВ',makproizvod as 'Македонски прозивод' from bazaartikli123.artikli" 
     COMMAND = New MySqlCommand(Query, konecija) 
     SDA.SelectCommand = COMMAND 
     SDA.Fill(bazaDataSet) 
     bajndsors.DataSource = bazaDataSet 
     DataGridView1.DataSource = bajndsors 
     SDA.Update(bazaDataSet) 
     konecija.Close() 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    Finally 
     konecija.Dispose() 
    End Try 

End Sub` 
+1

始終使用SQL參數。你爲什麼試圖爲INSERT執行一個閱讀器? – Plutonix

+0

你的實際問題和疑問是什麼? –

+0

我插入數據後,我想要顯示它到datagridview –

回答

0

有幾件事情可以改善的,開始使用SQL參數和執行查詢:

Dim Query As String = <sql> 
         insert into baza.artikli 
          (barkod,naziv,kupovna,prodazna,kolicina,proizvoditel,opis) 
         values (@p1,@p2,@p3,@p4,@p5,@p6,@p7) 
         </sql>.Value 

Using dbcon As New MySqlConnection(MySQLConnStr) 
    Using cmd As New MySqlCommand(Query, dbcon) 

     ' I dont really know what datatype these really are 
     cmd.Parameters.Add("@p1", MySqlDbType.VarChar).Value = TextBoxBarkod.Text 
     cmd.Parameters.Add("@p2", MySqlDbType.DateTime).Value = DTPNaziv.Value 
     cmd.Parameters.Add("@p3", MySqlDbType.Int32).Value = Convert.ToInt32(Textkupovna.Text) 
     ' ... 
     dbcon.Open() 
     ' this was missing: 
     cmd.ExecuteNonQuery() 
    End Using 

    dt = New DataTable 
    Using cmd As New OleDbCommand("SELECT * FROM baza.artikli") 

     dt.Load(cmd.ExecuteReader()) 
     dgv2.DataSource = dt 
    End Using 
End Using 
  • 我用文字對SQL的XML主要是爲了避免在這裏滾動,但它可以使你的代碼更具可讀性
  • 沒有在問題的代碼的小範圍內,但連接應該作爲創建需要; DBCommand對象是高度查詢特定的,所以它們也應該根據需要創建,而不是使用全局查詢。
  • 使用Using塊來確保DbConnections和其他具有Dispose()方法的對象被妥善處置。代碼關閉,但不處理連接。
  • 始終使用SQL參數。這些保證正確的數據類型通過,避免" Foo -'" & foovar & "' AND ..."代碼中的殘留,防止特殊字符在字符串中以及防止SQL注入攻擊。
  • 然後cmd.ExecuteNonQuery()執行插入。

之後,您可以運行一個新的查詢來獲取任何想要顯示的數據。請注意,您不需要創建一個DataAdapter來填充表格。目前還不清楚你想要展示什麼,所以也必須根據你的需要進行修改。

AutoGenerateColumns爲真時,它們將在您設置數據源時創建並且列名稱(=='表格的名稱?)將自動顯示。如果要不同文本顯示標題,可以手動設置它們或在SQL中使用別名,as shown on a previous answer

+0

我更新了問題,我創建了一個類,將顯示我的數據,順便說一句謝謝先生回答我的問題,你是偉大的,你能告訴我如何過濾數據庫兩個參數的名字和條形碼 –

+0

我不確定這個班的進場地點。過濾只是基礎SQL上的WHERE子句或'DefaultView'上的RowFilter。那些似乎沒有涉及這個問題,但 – Plutonix