none
还是关于如何保存远程数据库的问题 RRS feed

  • 问题

  • 我在昨天提出如何保存远程数据库的问题:http://social.msdn.microsoft.com/Forums/zh-CN/vbasiczhchs/thread/b0d79b36-2067-4c1a-97c3-53febfa3b3a4

    不过今天用另一种方法做的时候,出现这样一个问题,求教高手解答:

    首先贴上提示出错的主要代码:

    #Region "保存更改后的数据"
    
    
    
     Private Sub SaveChanges()
    
    
    
     Try
    
    
    
      Dim table As DataTable = CType(DataGridView1.DataSource, DataTable)
    
    
    
      Dim ChangRows As New ArrayList
    
    
    
      Dim Row As DataRow
    
    
    
      For Each Row In table.Rows
    
    
    
      If Row.RowState <> DataRowState.Unchanged Then
    
    
    
       ChangRows.Add(Row)
    
    
    
      End If
    
    
    
      Next
    
    
    
      If ChangRows.Count = 0 Then
    
    
    
      Return
    
    
    
      End If
    
    
    
    
    
    
    
      Dim GetTableString As String = "Select * From tabName”
    
    
      DefStrConn()
    
    
    
      StrConn.Open()
    
    
    
      Dim objAdapter As New SqlDataAdapter(GetTableString, StrConn)
    
    
    
      Dim cmdBuilder As SqlCommandBuilder = New SqlCommandBuilder(objAdapter)
    
    
    
      Dim Rows() As DataRow = CType(ChangRows.ToArray(GetType(DataRow)), DataRow())
    
    
    
      objAdapter.Update(Rows)
    
    
    
      objAdapter.Dispose()
    
    
    
      StrConn.Close()
    
    
    
     Catch ex As SqlClient.SqlException
    
    
    
      MessageBox.Show(ex.Message)
    
    
    
     End Try
    
    
    
     End Sub
    
    
    
    #End Region
    
    
    
    

    这段代码在保存本地数据库的时候,没有任何问题,但是在保存远程服务器连接上的数据库是却提示:对于不返回任何键列信息的SelectCommand,不支持UpdateCommand的动态SQL生成。请教高

    2011年3月30日 2:46

答案

  • 就是得加主键,要不就得干脆不用commandbuilder, 自己写deleteCommand and UpdateCommand。

    如果叫我选,我肯定是选择加主健。

     

     

    • 已标记为答案 zjyh16 2011年4月3日 1:00
    2011年4月2日 12:33

全部回复

  • 你好

    你可能需要使用BingingSource 這個類

    或者你可以參考以下URL

    http://msdn.microsoft.com/zh-cn/library/fbk67b6z.aspx

     

    Please correct me if my concept is wrong


    Chi
    2011年3月30日 4:15
    版主
  • 你好

    你可能需要使用BingingSource 這個類

    或者你可以參考以下URL

    http://msdn.microsoft.com/zh-cn/library/fbk67b6z.aspx

     

    Please correct me if my concept is wrong


    Chi

    谢谢,我先参考一下你发的内容。
    Yang
    2011年3月30日 5:57
  • 你好

    你可能需要使用BingingSource 這個類

    或者你可以參考以下URL

    http://msdn.microsoft.com/zh-cn/library/fbk67b6z.aspx

     

    Please correct me if my concept is wrong


    Chi
    看过并试过你给链接上的代码,但是还是不行。我发现我的程序是有个这样的问题,我在给SelectCommand这String时,我的表不是固定的。具体地说,本来SelectCommand是应该类似这样写的:"Select * From 表名",而我的表名是通过一个ComboBox的SelectedItem.tostring给的,因此我写成:"Select * From " & ComboBox.SelectedItem.ToString这个样子,这对我的程序前后的代码有什么影响?是这个问题导致表没加载到内存中吗?还是保存时找不到?(查询显示在DataGridView是没问题的)。热切期盼你的回答,再次感谢!
    2011年3月30日 7:19
  • 跟踪看看你的SelectCommand
    http://feiyun0112.cnblogs.com/
    • 已标记为答案 紫柔 2011年3月31日 3:33
    • 取消答案标记 zjyh16 2011年4月1日 11:48
    2011年3月31日 2:50
    版主
  • 跟踪看看你的SelectCommand
    http://feiyun0112.cnblogs.com/
    跟踪后又怎么做呢?!很疑惑~不过我已经知道不能保存的原因了,原因在于表没有主键,所以等于告诉我必须给定的UpdateCommand。这个问题蛮头疼,所有表都没有主键,不可能一一去设置。
    Yang
    2011年4月1日 11:50
  • 就是得加主键,要不就得干脆不用commandbuilder, 自己写deleteCommand and UpdateCommand。

    如果叫我选,我肯定是选择加主健。

     

     

    • 已标记为答案 zjyh16 2011年4月3日 1:00
    2011年4月2日 12:33
  • 就是得加主键,要不就得干脆不用commandbuilder, 自己写deleteCommand and UpdateCommand。

    如果叫我选,我肯定是选择加主健。 

    感谢你的回答,了解情况,知道了。
    Yang
    2011年4月3日 1:09