这是到目前为止我对数据库的一般理解:保存/更新/删除到预先存在的文件,该文件通过SQL绑定成表格。
这是我想要做的-我有一个预先定义好的Form数据表,其中定义了所有列。一旦关闭应用程序或运行了某些功能,我就需要在SQL(本地)中保存/更新数据。打开应用后,我需要保留所有数据。
到目前为止,在大多数涉及绑定到现有文件的地方,我还没有找到解决方案。当我使用Excel进行数据传输时,必须定义单元格并以表格形式引用单元格。
我的假设是,当使用VB.NET中的数据库时,带有值的表可以自动保存/加载/更新。但是,这只是我的假设,因为我以前从未使用过SQL。我不确定是否需要管理使用所有值创建的实际数据库文件,然后将它们绑定到数据表。例如,DataTable单元格XX到数据库列XX。
到目前为止,这是我创建数据库并添加到我的项目中的全部操作。我尝试了很少的代码,即使表中有数据,我也尝试使用DataTable,但我仍然使Dataset为空,但是到目前为止,任何操作都没有。
请提出关于我做错了的事情,并且有关数据库的其他信息也将非常有用。如前所述,我确实知道当实际文件存在时绑定如何工作。但是,由于我一直认为应该有一个绑定文件,因此创建和管理对我来说是一个困惑。
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
请在下面查看更多信息:
更新:我摆脱了无效对象错误。如我最初的想法,必须首先创建表。但是,当我尝试保存时,“我的数据集”总是显示为“空” ...单元格确实将BN数据包含为“ 1,2,....”。 。确实加载了某些内容,因为当我尝试添加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
更新:我可以使用所有的东西,但是我不能保存多行.....真的可以使用一些帮助
答案 0 :(得分:0)
让我们从仅显示一些数据开始。将DataGridView添加到窗体。您可以通过按钮调用LoadData()。我不太确定您的连接字符串,但可以尝试一下。
Private dt As DataTable
Private sql As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
Private Sub LoadData()
'***EDIT*** Add instantiation line
dt = New DataTable()
'The Using...End Using blocks will close and dispose your database objects
'even if there is an error
Using cn As New SqlConnection(sql)
'You can pass the command text and the connection directly to the constructor
'In the select statement use the actual names of the field and table as they appear in the database.
Using cmd As New SqlCommand("Select BN From [Insert the name of the table in the database]", cn)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub
这是我想到的显示数据的最简单方法。一旦可行,我们将继续更改数据。如果您在cn.Open()
上遇到错误,我们将不得不处理连接字符串。
****编辑****
Private Sub TestConnection()
Dim sql As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
Using cn As New SqlConnection(sql)
cn.Open()
End Using
End Sub
答案 1 :(得分:0)
在您的SQL查询中,删除WHERE DataTable ='
。该语句正在寻找列名DataTable
,我认为该列名不存在。 WHERE子句用于帮助过滤查询。您仅对表中的列名使用WHERE。
例如:
SELECT BN FROM DataTable
将从DataTable的BN列返回所有值。
请注意,如果您有多列,则上面的查询仍将仅从BN返回值。
SELECT * FROM DataTable
将返回DataTable中的每个值。
w3schools是查看SQL文档的有用站点。