2014-05-21 75 views
0
Dim Con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Music_Sales_Database.mdb;") 
    Dim Com As OleDbCommand 
    Dim SaleCode As Integer 
    Dim MusicID As String 
    Dim SubTotalPrice As Decimal 
    Dim Copies1 As Integer 
    Dim STR1 As String 

    SaleCode = 1 

    Com = New OleDbCommand 
    Com.Connection = Con 

    For x As Integer = 0 To SalesDataGridView.Rows.Count - 1 
     MusicID = SalesDataGridView.Rows(x).Cells(0).Value 
     SubTotalPrice = SalesDataGridView.Rows(x).Cells(5).Value 
     Copies1 = SalesDataGridView.Rows(x).Cells(3).Value 
     STR1 = "INSERT INTO Sales(Sales_ID, Sales_Date, Copies, Music_ID, Staff_ID, Total_Price) VALUES (@Sales_ID, @Sales_Date, @Copies, @Music_ID, @Staff_ID, @Total_Price)" 
     Dim Comm As New OleDbCommand(STR1, Con) 
     Comm.Parameters.AddWithValue("@Sales_ID", SaleCode) 
     Comm.Parameters.AddWithValue("@Sales_Date", txtDateAndTime) 
     Comm.Parameters.AddWithValue("@Copies", Copies1) 
     Comm.Parameters.AddWithValue("@Music_ID", MusicID) 
     Comm.Parameters.AddWithValue("@Staff_ID", txtStaff_ID) 
     Comm.Parameters.AddWithValue("@Total_Price", SubTotalPrice) 
     'Command.ExecuteNonQuery() 
     Comm.Dispose() 
    Next 
    Connection.Close() 

对于我所有的大四,我不知道为什么它没有任何错误显示,并且无法将其保存在Access数据库中。将datagridview的所有数据插入到数据库vb.net

整个代码是在按钮,我解释我是如何想我的程序工作:

1)我有一个未绑定的DataGridView,可以从几个文本框添加数据。 2)一个名为Check-Out的按钮,这个按钮用于将我的datagridview数据传递到Access数据库.....这是我面对的问题.....有人可以帮我解决它.....

THX很多...

我也提到了这个环节,但我不是太熟悉C#Insert all data of a datagridview to database at once

+0

为什么'Command.ExecuteNonQuery()'被注释掉了?这使它工作。此外,'Comm.Dispose()'应该在Next块之外以插入所有行。否则,解释它如何失败或任何错误都会有帮助。 – Plutonix

+0

@Plutonix它显示“对象引用未设置为对象的实例”。当nvr注释掉Command.ExecuteQuery() – user3496755

+0

你的OLEDBCommand对象被创建为'Com';但你也创建'Comm',然后使用'Command'。你只需要一个OleDBCommand对象,选择一个。这里是如何使用USING块的示例 - http://stackoverflow.com/questions/23377408/how-can-i-use-where-function-using-insert-into-module/23377684#23377684 – Plutonix

回答

0

你正在做的事情复杂得多,他们需要。只需创建一个DataTable并将其绑定到网格。当需要保存数据时,需要调用数据适配器的Update方法来保存批次。您可以使用相同的数据适配器生成的DataTable架构通过调用FillSchema,然后使用命令生成器生成INSERT命令,或者你可以建立的模式和手动INSERT命令。下面是一些例子:

http://www.vbforums.com/showthread.php?469872-Retrieving-and-Saving-Data-in-Databases&highlight=

0

你需要打开for循环之前的连接,并在Command.ExecuteNonQuery()删除注释

您的代码将如下图所示

Dim Con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Music_Sales_Database.mdb;") 
Dim Com As OleDbCommand 
Dim SaleCode As Integer 
Dim MusicID As String 
Dim SubTotalPrice As Decimal 
Dim Copies1 As Integer 
Dim STR1 As String 

SaleCode = 1 

Com = New OleDbCommand 
Com.Connection = Con 
Connection.open() 
For x As Integer = 0 To SalesDataGridView.Rows.Count - 1 
    MusicID = SalesDataGridView.Rows(x).Cells(0).Value 
    SubTotalPrice = SalesDataGridView.Rows(x).Cells(5).Value 
    Copies1 = SalesDataGridView.Rows(x).Cells(3).Value 
    STR1 = "INSERT INTO Sales(Sales_ID, Sales_Date, Copies, Music_ID, Staff_ID, Total_Price) VALUES (@Sales_ID, @Sales_Date, @Copies, @Music_ID, @Staff_ID, @Total_Price)" 
    Dim Comm As New OleDbCommand(STR1, Con) 
    Comm.Parameters.AddWithValue("@Sales_ID", SaleCode) 
    Comm.Parameters.AddWithValue("@Sales_Date", txtDateAndTime) 
    Comm.Parameters.AddWithValue("@Copies", Copies1) 
    Comm.Parameters.AddWithValue("@Music_ID", MusicID) 
    Comm.Parameters.AddWithValue("@Staff_ID", txtStaff_ID) 
    Comm.Parameters.AddWithValue("@Total_Price", SubTotalPrice) 
    Command.ExecuteNonQuery() 
    Comm.Dispose() 
Next 
Connection.Close() 
相关问题