ho creato un'Application Windows che deve operare su un DB (creato sempre da me) composto da 2 tabelle:
CATEGORIA_ARTICOLI: 2 colonne (id, NomeCategoria)
ELENCO_ARTICOLI: 7 colonne
leggo i dati dalle 2 tabelle nel load del form e li inserisco in un dataSet:
codice:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim connectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB\CatalogoArticoliIoProgrammo.mdf;Integrated Security=True;User Instance=True"
Dim mySqlConnection As SqlConnection = New SqlConnection(connectionString)
Try
mySqlConnection.Open()
myDataSet = New DataSet()
Dim queryString1 As String = "SELECT * FROM CATEGORIA_ARTICOLI"
Dim queryString2 As String = "SELECT * FROM ELENCO_ARTICOLI"
Dim nameTable1 As String = "CATEGORIA_ARTICOLI"
Dim nameTable2 As String = "ELENCO_ARTICOLI"
Dim mySqlCommand As SqlCommand = mySqlConnection.CreateCommand()
mySqlCommand.CommandText = queryString1
Dim mySqlDataAdapter As SqlDataAdapter = New SqlDataAdapter()
mySqlDataAdapter.SelectCommand = mySqlCommand
mySqlDataAdapter.Fill(myDataSet, nameTable1)
' Aggiungo alla DataTable CATEGORIA_ARTICOLI la voce "Tutte le categorie" in modo che
' tale voce possa essere visualizzata nel menù a tendina della ComBox.
' Questa voce ha id = 0, quindi è inesistente sul DB
Dim newCustomersRow As DataRow = myDataSet.Tables("CATEGORIA_ARTICOLI").NewRow()
newCustomersRow("id") = "0"
newCustomersRow("NomeCategoria") = "Tutte le categorie"
myDataSet.Tables("CATEGORIA_ARTICOLI").Rows.InsertAt(newCustomersRow, 0)
ComboBox1.DataSource = myDataSet.Tables("CATEGORIA_ARTICOLI")
ComboBox1.DisplayMember = "NomeCategoria"
ComboBox1.ValueMember = "id"
ComboBox1.SelectedValue = 0
mySqlCommand.CommandText = queryString2
mySqlDataAdapter.SelectCommand = mySqlCommand
mySqlDataAdapter.Fill(myDataSet, nameTable2)
DataGridView1.DataSource = myDataSet.Tables("ELENCO_ARTICOLI")
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).Visible = False
DataGridView1.AllowUserToAddRows = False
Catch ex As Exception
Throw New Exception(ex.Message)
Finally
mySqlConnection.Close()
mySqlConnection.Dispose()
End Try
End Sub
Quando vado ad inserire una nuova categoria da un TextBox vado ad aggiornare il DataSet e ad aggiungererla nella tabella CATEGORIA_ARTICOLI del DB.
Il problema è che il seguente codice non mi dò errore ma non inserisce un bel niente nel DB!
codice:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Trim(TextBox1.Text) <> "" Then
Dim newRow As DataRow = myDataSet.Tables("CATEGORIA_ARTICOLI").NewRow()
newRow("id") = "-1"
newRow("NomeCategoria") = Trim(TextBox1.Text)
myDataSet.Tables("CATEGORIA_ARTICOLI").Rows.Add(newRow)
Dim connectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB\CatalogoArticoliIoProgrammo.mdf;Integrated Security=True;User Instance=True"
Dim mySqlConnection As SqlConnection = New SqlConnection(connectionString)
Try
mySqlConnection.Open()
Dim insertQuery As String = "INSERT INTO CATEGORIA_ARTICOLI (NomeCategoria) VALUES (@NomeCategoria)"
Dim cmd As New SqlCommand(insertQuery, mySqlConnection)
Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
da.InsertCommand = cmd
da.InsertCommand.Connection = mySqlConnection
Dim param As SqlParameter = New SqlParameter("@NomeCategoria", SqlDbType.NVarChar, 50, "NomeCategoria")
da.InsertCommand.Parameters.Add(param)
da.Update(myDataSet, "CATEGORIA_ARTICOLI")
Catch ex As Exception
Console.WriteLine("Error: " & ex.ToString)
Finally
mySqlConnection.Close()
mySqlConnection.Dispose()
End Try
TextBox1.Text = Nothing
TextBox1.Enabled = False
Button2.Enabled = False
End If
End Sub
Dove sbaglio?!