Buscar registro en Dataset, modificarlo y guardarlo en SQL Server
Publicado por Pedro (2 intervenciones) el 06/10/2014 12:04:20
Buenos días,
Estoy empezando a programar en Visual Net, hasta ahora lo hacía en Access, y me surge la siguiente duda:
Necesito buscar en un Dataset el registro de una tabla que cumpla un requisito (buscar por numero de factura) y una vez lo encuentre comprobar si el importe es mayor de cero y si lo es modificarlo a 100 y después guardar el registro en el Dataset (sin saber la clave de la tabla) y propagarlo a la tabla original de SQL Server, en Access sería algo así:
__________________________________________________________________________________________
Private Sub BusqFra(strFra As String)
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
rs.Open "SELECT * FROM tblRepartos WHERE NumFra='" & strFra & "';", cn, adOpenKeyset, adLockOptimistic, adCmdText
If rs.RecordCount > 0 Then
If rs!Importe > 0 Then
rs!Importe = 100
rs.Update
End If
End If
End Sub
___________________________________________________________________________________________
Lo hago de esta manera en Ado Net:
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BusqFra("N456")
End Sub
Private Sub BusqFra(ByVal NumFra As String)
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Data Source=Yo\SQLEXPRESS;Initial Catalog=Clientes;Integrated Security=True"
Dim oDS = New DataSet()
Dim oDA As New SqlDataAdapter("SELECT * FROM tblRepartos", oConexion)
oDA.Fill(oDS, "Repartos")
Dim oCB As SqlCommandBuilder = New SqlCommandBuilder(oDA)
Dim oDR() As DataRow
oDR = oDS.Tables("Repartos").Select("NumFra = '" & NumFra & "'")
For Each Rep As DataRow In oDR
If Rep("Importe") > 0 Then
Rep("Importe") = 100
End If
Next
oDA.Update(oDS, "Repartos")
End Sub
End Class
______________________________________________________________________________________
Y me da este error:
"La generación SQL dinámica para UpdateCommand no es compatible con SelectCommand, que no devuelve ninguna información sobre columnas clave."
Me podeis hechar una mano.
Gracias,
Pedro
Estoy empezando a programar en Visual Net, hasta ahora lo hacía en Access, y me surge la siguiente duda:
Necesito buscar en un Dataset el registro de una tabla que cumpla un requisito (buscar por numero de factura) y una vez lo encuentre comprobar si el importe es mayor de cero y si lo es modificarlo a 100 y después guardar el registro en el Dataset (sin saber la clave de la tabla) y propagarlo a la tabla original de SQL Server, en Access sería algo así:
__________________________________________________________________________________________
Private Sub BusqFra(strFra As String)
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
rs.Open "SELECT * FROM tblRepartos WHERE NumFra='" & strFra & "';", cn, adOpenKeyset, adLockOptimistic, adCmdText
If rs.RecordCount > 0 Then
If rs!Importe > 0 Then
rs!Importe = 100
rs.Update
End If
End If
End Sub
___________________________________________________________________________________________
Lo hago de esta manera en Ado Net:
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BusqFra("N456")
End Sub
Private Sub BusqFra(ByVal NumFra As String)
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Data Source=Yo\SQLEXPRESS;Initial Catalog=Clientes;Integrated Security=True"
Dim oDS = New DataSet()
Dim oDA As New SqlDataAdapter("SELECT * FROM tblRepartos", oConexion)
oDA.Fill(oDS, "Repartos")
Dim oCB As SqlCommandBuilder = New SqlCommandBuilder(oDA)
Dim oDR() As DataRow
oDR = oDS.Tables("Repartos").Select("NumFra = '" & NumFra & "'")
For Each Rep As DataRow In oDR
If Rep("Importe") > 0 Then
Rep("Importe") = 100
End If
Next
oDA.Update(oDS, "Repartos")
End Sub
End Class
______________________________________________________________________________________
Y me da este error:
"La generación SQL dinámica para UpdateCommand no es compatible con SelectCommand, que no devuelve ninguna información sobre columnas clave."
Me podeis hechar una mano.
Gracias,
Pedro
Valora esta pregunta


0