【问题标题】:Updating database from data in Gridview in VB在 VB 中从 Gridview 中的数据更新数据库
【发布时间】:2014-04-28 18:17:09
【问题描述】:

这是用于将数据从数据库显示到 gridview 的代码....如果我在 GridView 中进行任何更改并且它必须在数据库中更新...我不知道该怎么做...任何人都可以帮助我....

    Dim DBCONSRT, QRYSTR As String

    Dim strSQL As String

    Dim DBCON, myConn, myCommand, rs As Object

    Dim NoOfRecords As Long
    rs = CreateObject("ADODB.Recordset")
    Const DB_CONNECT_STRING = "Provider=MSDASQL.1;Persist Security Info=False;User ID=cpa5k;Data Source=NP1;DSN=NP1;UID=cpa5k;PASSWORD=pass;SDSN=Default;HST=ibslnpb1.sysplex.homedepot.com;PRT=4101;Initial Catalog=QA1MM;"
    myConn = CreateObject("ADODB.Connection")
    myCommand = CreateObject("ADODB.Command")
    myConn.Open(DB_CONNECT_STRING)
    myCommand.ActiveConnection = myConn
    strSQL = "select * from QA1MM.STRSK_OH FETCH FIRST 10 ROWS ONLY with ur;"
    rs.Open(strSQL, myConn)
    Dim myDA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
    Dim myDS As DataSet = New DataSet

    myDA.Fill(myDS, rs, "MyTable")
    DataGridView1.DataSource = myDS.Tables(0)
    DataGridView1.Refresh()
    myConn.Close()

我正在尝试这种方法,但它不起作用

    Dim myDA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
    Dim myDS As DataSet = New DataSet
    myDA.Fill(myDS, rs, "MyTable")
    ds = DataGridView1.DataSource
    myDA.Update(ds)

我是这样改的:

    Dim DBCONSRT, QRYSTR As String
    Dim strSQL As String
    Dim DBCON, myConn, myCommand, rs As Object
    Dim ds As DataSet = New DataSet
    rs = CreateObject("ADODB.Recordset")
    Const DB_CONNECT_STRING = "Provider=MSDASQL.1;Persist Security Info=False;User ID=cpa5k;Data Source=NP1;DSN=NP1;UID=cpa5k;PASSWORD=mexico13;SDSN=Default;HST=ibslnpb1.sysplex.homedepot.com;PRT=4101;Initial Catalog=QA1MM;"
    myConn = CreateObject("ADODB.Connection")
    myCommand = CreateObject("ADODB.Command")
    myConn.Open(DB_CONNECT_STRING)
    myCommand.ActiveConnection = myConn

    Dim myDA As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
    Dim myDS As DataSet = New DataSet
    Dim dtable As DataTable = New DataTable()
    myDA.UpdateCommand = New SqlClient.SqlCommand("UPDATE QA1MM.STRSK_OH set OH_QTY = 10  WHERE SKU_NBR = 108011", myConn)
    '   myDA.UpdateCommand.Parameters.Add("@OH_QTY", OleDb.OleDbType.VarChar, 15, "OH_QTY")
    '   myDA.UpdateCommand.Parameters.Add("@SKU_NBR", OleDb.OleDbType.VarChar, 15, "SKU_NBR")
    '   myDA.UpdateCommand.Parameters(0).SourceVersion = DataRowVersion.Current
    '   myDA.UpdateCommand.Parameters(1).SourceVersion = DataRowVersion.Current
    dtable = DataGridView1.DataSource
    myDA.Update(dtable)
    myConn.Close()

但它给出了错误,例如“无法将类型为 'System.__ComObject' 的 COM 对象转换为类类型 'System.Data.SqlClient.SqlConnection'。表示 COM 组件的类型的实例不能转换为不支持的类型表示 COM 组件;但是,只要底层 COM 组件支持对接口的 IID 的 QueryInterface 调用,它们就可以转换为接口。”

我将连接字符串更改为:

Provider=MSDASQL.1;Persist Security Info=False;Data 
Source=NP1;DSN=NP1;SDSN=Default;HST=ibslnpb1.sysplex.homedepot.com;PRT=4101;Integrated 
Security = True;Initial Catalog=QA1MM;

它不工作。错误是“多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值,如果可用。没有完成任何工作。”.....对不起,我不知道如何更改.. ...

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    你写的像follow

    myConn.Open(DB_CONNECT_STRING) 
    myDA.Update(ds.Tables(0))
    myConn.Close() 
    

    编辑:

    不要将DataGridView1的数据源放入数据集,而是放入DataTable中,如下所示

                Dim dtable As New DataTable()
                dtable = DataGridView1.DataSource
    

    并使用 DataAdapter 更新表

    myConn.Open(DB_CONNECT_STRING) 
    myDA.Update(dtable)
    myConn.Close() 
    

    参考此链接How to write UpdateCommand to OleDBDataAdapter

    【讨论】:

    • 按照我的更改更改编码。
    • 连接字符串中没有启用 Integrated Security = true。
    • 在此处删除您以前的一些 cmets 以继续发表评论。
    • @SaiKalyanAkshinthala 这正是你不应该做的。请在聊天中继续讨论。
    • 请将相关信息编辑到问题和/或答案中,如果有必要,甚至发布带有新细节的新答案。问题/答案的评论部分仅用于提供有关手头实际帖子的相关信息,例如错误、要求更多详细信息等,而不是长时间讨论,即使它们可能对相关人员有所帮助。如果您需要继续讨论,请考虑将其带到聊天室。
    【解决方案2】:

    试试这个:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            DataSet1.Tables("employee").AcceptChanges()
            Dim i As Integer
            Dim cmdbuilder As New OdbcCommandBuilder(odbcadptr)
            i = odbcadptr.Update(odbcds, "customer")
            MsgBox("Updated Rows: " & i)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多