【发布时间】:2017-01-08 18:21:03
【问题描述】:
让我简要说明我的问题,然后显示代码。
我想从 SQL 数据库中提取数据,使用 Visual Basic 中的 datagridview 显示它,允许用户更改 datagridview 中的内容,然后将任何更改发布回数据库。我使用来自 stackoverflow 和其他论坛的建议尝试了多种方法,但没有任何效果。这是对我来说最有意义的方法,但如果有更好或更简单的方法来做到这一点,我会全力以赴。
我已经删除了其他不相关的代码部分。代码正确地从数据库中获取数据;将其放入datagridview并显示它。当我输入一个单元格以更改内容,然后尝试将结果保存回数据库时,这就是我得到运行时错误的地方。
Imports System.IO
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class FrmRunTerm
Private connectionString As String
Private ControlResultsConnection As New SqlConnection
Private ReadDS As New SqlDataAdapter
Private ControlResultsDS As New DataSet
Private Sub FrmRunTerm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CboWeek.Items.Add("Week 1 - Tuesday, November 15, 2016")
CboWeek.Items.Add("Week 2 - Tuesday, November 22, 2016")
CboWeek.Items.Add("Week 3 - Tuesday, November 29, 2016")
CboWeek.Items.Add("Week 4 - Tuesday, December 6, 2016")
CboWeek.Items.Add("Week 5 - Tuesday, December 13, 2016")
CboWeek.Items.Add("Week 6 - Tuesday, December 20, 2016")
CboWeek.Items.Add("Week 7 - Tuesday, December 27, 2016")
CboWeek.Items.Add("Week 8 - Tuesday, January 3, 2017")
CboWeek.Items.Add("Week 9 - Tuesday, January 10, 2017")
CboWeek.Items.Add("Week 10 - Tuesday, January 17, 2017")
CboWeek.Items.Add("Week 11 - Tuesday, January 24, 2017")
CboWeek.Items.Add("Week 12 - Tuesday, January 31, 2017")
If CboWeek.Text = "" Then
MessageBox.Show("Please select a week to process.", "Termination Control Utility Set", MessageBoxButtons.OK)
End If
End Sub
Private Sub Btn_CWA_Click(sender As Object, e As EventArgs) Handles Btn_CWA.Click
If CboWeek.Text <> "" Then
ListBox1.Items.Add("Processing continuation of weekly analysis...")
Application.DoEvents()
connectionString = "<a lot of stuff – but it works>"
Dim strControlResultsSql As String = "SELECT * FROM dbo.RG_Control_Results_Cumulative"
Using ControlResultsConnection As New SqlConnection(connectionString)
ControlResultsConnection.Open()
Using ReadDS As New SqlDataAdapter(strControlResultsSql, ControlResultsConnection)
ReadDS.Fill(ControlResultsDS)
End Using
End Using
Dim SQLCommandBlder As New SqlCommandBuilder(ReadDS)
DataGridView1.DataSource = ControlResultsDS.Tables(0)
Application.DoEvents()
End If
End Sub
Private Sub Btn_InterimSave_Click(sender As Object, e As EventArgs) Handles Btn_InterimSave.Click
ListBox1.Items.Add("Saving data...")
Application.DoEvents()
Dim SQLCB As New SqlCommandBuilder(ReadDS)
ReadDS.Update(ControlResultsDS)
ControlResultsDS.AcceptChanges()
SQLCB.Dispose()
ControlResultsConnection.close()
End Sub
End Class
我得到的错误是 ReadDS.Update(ControlResultsDS)。错误是:
“System.InvalidOperationException”类型的未处理异常 发生在 System.Data.dll
附加信息:DataAdapter.SelectCommand 属性需要初始化。
任何建议将不胜感激。提前谢谢大家!
根据 Rahul 的建议,我将代码更改如下:
Dim SQLCB As New SqlCommandBuilder(ReadDS)
ReadDS.SelectCommand = New SqlCommand("Select * From dbo.RG_Control_Results_Cumulative")
ReadDS.SelectCommand.Connection = New SqlConnection(connectionString)
ReadDS.Update(ControlResultsDS)
ControlResultsDS.AcceptChanges()
SQLCB.Dispose()
并在 ReadDS.Update 行收到以下运行时错误:
System.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:对于不返回任何键列信息的 SelectCommand,不支持为 UpdateCommand 生成动态 SQL。
感谢您,再次对新手提出的问题表示歉意。
【问题讨论】:
标签: sql visual-studio sql-server-2008 datagridview basic