Visual Basic.NET - Conexion ado.net error al guardar los cambios

 
Vista:

Conexion ado.net error al guardar los cambios

Publicado por undergl (1 intervención) el 29/04/2011 19:40:13
Buenas, soy nuevo en .net. Lo ultimo que toque fue vb6. Estoy intentando resetear el stock en una base de datos de dbase (facturaplus), lo tengo hecho pero me falla al intentar guardar los datos del datatable modificado. Pego el codigo

1.
Imports System
2.
Imports System.Windows.Forms
3.
Imports System.Data
4.
Imports System.Data.Odbc
5.

6.

7.

8.
Public Class Form1
9.

10.
Private Sub btnExaminar_Click(ByVal sender As Object, _
11.
ByVal e As EventArgs) _
12.
Handles btnExaminar.Click
13.
Dim oFD As New OpenFileDialog
14.

15.
With oFD
16.
.Filter = "stocks.dbf|stocks.dbf|Todos (*.*)|*.*"
17.
.FileName = txtFic.Text
18.
If .ShowDialog = DialogResult.OK Then
19.
txtFic.Text = .FileName
20.
' El nombre del fichero
21.
txtSelect.Text = System.IO.Path.GetFileNameWithoutExtension(txtFic.Text)
22.
btnAbrir_Click(Nothing, Nothing)
23.
End If
24.
End With
25.
End Sub
26.

27.
Private Sub btnAbrir_Click(ByVal sender As Object, _
28.
ByVal e As EventArgs) _
29.
Handles btnAbrir.Click
30.
Dim sBase As String = txtFic.Text
31.
Dim sSelect As String = "SELECT CREF,NSTOCK FROM " & txtSelect.Text
32.
Dim sConn As String
33.
Dim preg As MsgBoxResult
34.

35.
sConn = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
36.
System.IO.Path.GetDirectoryName(sBase) & ";"
37.

38.

39.
Using dbConn As New System.Data.Odbc.OdbcConnection(sConn)
40.
Try
41.
dbConn.Open()
42.

43.
Dim da As New System.Data.Odbc.OdbcDataAdapter(sSelect, dbConn)
44.
Dim cb As New OdbcCommandBuilder(da)
45.
da.InsertCommand = cb.GetInsertCommand
46.
da.UpdateCommand = cb.GetUpdateCommand
47.
da.DeleteCommand = cb.GetDeleteCommand
48.

49.
Dim dt As New DataTable
50.
Dim n As Integer = 0
51.
' contendra la fila a modificar
52.
Dim dr As DataRow
53.

54.

55.
da.Fill(dt)
56.

57.
For i As Integer = 1 To dt.Rows.Count - 1
58.
dr = dt.Rows(i)
59.
dr("NSTOCK") = 0
60.
n = n + 1
61.

62.
Next
63.

64.
TextBox1.Text = n.ToString
65.

66.

67.
dgvDiarios.DataSource = dt
68.
preg = MessageBox.Show("¿Está seguro de resetear el stock?", "Confirmacion", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
69.
' Preguntamos si queremos modificar
70.
If preg = MsgBoxResult.Yes Then
71.
' Guardar físicamente los datos en la base
72.
Try
73.
da.Update(dt)
74.
dt.AcceptChanges()
75.
Catch ex As DBConcurrencyException
76.
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
77.
Catch ex As Exception
78.
MessageBox.Show(ex.Message)
79.
End Try
80.

81.
End If
82.
dbConn.Close()
83.

84.
Catch ex As Exception
85.
MessageBox.Show("Error al abrir la base de datos" & vbCrLf & ex.Message)
86.
Exit Sub
87.
End Try
88.
End Using
89.

90.
End Sub
91.

92.
End Class


Falla la parte
da.Update(dt)
74.
dt.AcceptChanges()

el resto esta correcto, en el datagrid del formulario me sale toda la columna del NSTOCK a 0 pero no consigo guardar los cambios en la base de datos.

Salta el siguiente error:

Error al abrir la base de datos
La generacion SQL dinamica para updatecommand no es compatible con selectcommand que no devuelve ninguna informacion sobre columnas clave.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder