【发布时间】:2019-06-10 22:16:02
【问题描述】:
这是我目前对数据库的一般理解:保存/更新/删除到通过 SQL 绑定形成的预先存在的文件。
这就是我想要做的 - 我有一个预先制作的表单数据表,其中定义了所有列。一旦应用程序关闭或某些功能运行,我需要在 SQL 中保存/更新该数据(在本地)。一旦应用程序打开,我需要保留所有数据。
到目前为止,在大多数涉及绑定到现有文件的地方,我都没有找到单一的解决方案。当我使用 Excel 数据传输单元格时,必须在人口表格中定义和引用。
我的假设是当使用来自 VB.NET 的数据库时,可以自动创建带有值的表并保存/加载/更新。然而,这只是我的假设,因为我以前从未使用过 SQL。我不确定是否需要管理使用所有值创建的实际数据库文件,然后将它们绑定到数据表。例如 DataTable 单元格 XX 到数据库列 XX。
这是我到目前为止所做的,我创建了数据库并添加到我的项目中。我尝试了一些代码,即使表中有数据我也尝试使用 DataTable,但我一直得到空数据集,但到目前为止没有任何效果。
请就我做错的地方提出建议,有关数据库的其他信息也会很棒。按照前面的说法,我确实知道当实际文件存在时绑定是如何工作的。但是创建和管理让我感到困惑,因为我一直认为应该有一个绑定文件。
Dim connetionString As String
Dim sqlCnn As SqlConnection
Dim sqlCmd As SqlCommand
Dim adapter As New SqlDataAdapter
Dim ds As New DataSet
Dim sql As String
connetionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
sql = "SELECT BN FROM DataTable" ' BN is my column name and DataTable is the name of my Table where data gets populated. This is also confusing to me How does it know which value is what? Is there are space/word/characters requirements?
' adapter.TableMappings.Add("DataTable", sql)
If ds.Tables.Count > 0 Then
sqlCnn = New SqlConnection(connetionString)
Try
sqlCnn.Open()
sqlCmd = New SqlCommand(sql, sqlCnn)
adapter.SelectCommand = sqlCmd
adapter.Update(ds)
adapter.Dispose()
sqlCmd.Dispose()
sqlCnn.Close()
Catch ex As Exception
MsgBox("Can not open connection !" & vbCrLf & Err.Description)
End Try
ElseIf ds.Tables.Count = 0 Then
MsgBox("Empty data")
End If
End Sub
我用来创建/保存数据库的代码。与之前一样,所有列/格式都是预先制作、加载的。
Dim connetionString As String
Dim sqlCnn As SqlConnection
Dim sqlCmd As SqlCommand
Dim adapter As New SqlDataAdapter
Dim ds As New DataSet
Dim sql As String
connetionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
sql = "Select BN FROM DataTable"
adapter.TableMappings.Add("BN", sql)
If DataTable.RowCount > 0 Then
sqlCnn = New SqlConnection(connetionString)
Try
sqlCnn.Open()
sqlCmd = New SqlCommand(sql, sqlCnn)
adapter.SelectCommand = sqlCmd
adapter.Update(ds, "BN")
adapter.Dispose()
sqlCmd.Dispose()
sqlCnn.Close()
Catch ex As Exception
MsgBox("Can not open connection !" & vbCrLf & Err.Description)
End Try
ElseIf DataTable.RowCount = 0 Then
MsgBox("Empty data")
End If
End Sub
请在下面查看更多信息:
- 数据表列/格式的结构是为了直观表示。
- 当用户启动时,应用数据库可以为空/可以包含值。
- 当用户运行某些功能关闭应用程序值被保存并且只有值。 如果我想要一个 MS Access,我会构建相同的表/值并将其与表单值交叉引用。表单值来自外部来源,格式/数量始终是已知的。 希望这有助于更清楚地了解我的问题。也许 SQL 对我来说不是一个正确的选择?是否需要在值操作之前构建 SQL。
更新:我摆脱了无效对象错误。正如我最初的想法,必须首先创建表。但是,当我尝试保存时,我的 DataSet 总是显示为 EMPTY... 单元格确实包含 BN 数据为“1,2, ....) 即使我删除了“If”逻辑 Save and Load 表显示为空. 有些东西确实加载了,因为当我尝试添加 BN 时,它告诉我绑定 bla bla bla(不同的问题)
代码:
Private Sub SaveData()
Dim connetionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
Dim sql As String = "SELECT BN FROM DataTable_d"
Dim sqlCnn As SqlConnection
Dim sqlCmd As SqlCommand
Dim adapter As New SqlDataAdapter
Dim ds As New DataSet()
adapter.TableMappings.Add("BN", sql)
If ds.Tables.Count > 0 Then
sqlCnn = New SqlConnection(connetionString)
Try
sqlCnn.Open()
sqlCmd = New SqlCommand(sql, sqlCnn)
adapter.SelectCommand = sqlCmd
adapter.Update(ds, "BN")
adapter.Dispose()
sqlCmd.Dispose()
sqlCnn.Close()
Catch ex As Exception
MsgBox("Can not open connection !" & vbCrLf & Err.Description)
End Try
ElseIf ds.Tables.Count = 0 Then
MsgBox("Empty data")
End If
End Sub
更新:我得到了所有的东西,但我无法保存多行.....真的可以使用一些帮助
【问题讨论】:
-
您是否安装了 Sql Server Management Studio? (SSMS) 你能在 SSMS 中看到你的数据库吗?顺便说一句,它是免费下载的,它将帮助您针对您的数据库测试 Sql 语句。
标签: sql-server database vb.net