问题描述
我想将数据从sql server导出到dbf文件。下面的查询没有日期。但是,当我添加日期时,它不起作用。请解决我的问题,在此先感谢。 [错误是:INSERT INTO错误]
Dim dv As DataView = datacls.fnGetdata(sql_X,ClsDataConnection.DMode.D_DataView)
Dim dt As New DataTable ' // assuming this is already populated from your sql Database.
Dim buildInsert As StringBuilder = New StringBuilder
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\a\;Extended Properties=dBASE IV;"
Dim connection As OleDbConnection = New OleDbConnection(connectionString)
Dim scriptCommand As OleDbCommand = connection.CreateCommand
Dim str_sr_no As String = ""
Dim str_date As String = ""
Dim str_book As String = ""
Dim str_vchseries As String = ""
Dim str_vchno As String = ""
Dim str_accode As String = ""
Dim str_achead As String = ""
Dim str_city As String = ""
Dim str_narration As String = ""
Dim str_debit As String = ""
Dim str_credit As String = ""
For x = 0 To dv.Count - 1
'sr_No,DT,'B' Book,'B' VCHseries,[VCH No],[Accode],'' [AcHead],[City],narration,debit,credit
str_sr_no = dv(x).Item("lineno").ToString
str_date = Format(CDate(dv(x).Item("date")),"MM/dd/yyyy")
str_book = dv(x).Item("Book").ToString
str_vchseries = dv(x).Item("VCHseries").ToString
str_vchno = dv(x).Item("VCHNo").ToString
str_accode = dv(x).Item("Accode").ToString
str_achead = dv(x).Item("AcHead").ToString
str_city = dv(x).Item("City").ToString
str_narration = dv(x).Item("narration").ToString
str_debit = dv(x).Item("debit").ToString
str_credit = dv(x).Item("credit").ToString
Dim ndt As Date = Date.Now()
scriptCommand.CommandType = CommandType.Text
scriptCommand.CommandText = "INSERT INTO Fe130328.DBF (LINENO,DATE,BOOK,VCHSERIES,VCHNO,ACCODE,ACHEAD,CITY,NARRATION,DEBIT,CREDIT) VALUES ('" & str_sr_no & "','" & ndt & "','" & str_book & "','" & str_vchseries & "','" & str_vchno & "','" & str_accode & "','" & str_achead & "','" & str_city & "','" & str_narration & "','" & str_debit & "','" & str_credit & "')"
connection.open()
scriptCommand.ExecuteNonQuery()
connection.Close()
Next
解决方法
这是将数据从一个数据库获取到另一个数据库的正确方法:
Dim table As New DataTable
Using sourceAdapter As New OleDbDataAdapter("SELECT * FROM SourceTable","source connection string here") With {.AcceptChangesDuringFill = False}
sourceAdapter.Fill(table)
End Using
Using destinationConnection As New OleDbConnection("destination connection string here"),destinationCommand As New OleDbCommand("INSERT INTO DestinationTable ([Column1],[Column2],[Column3]) VALUES (@Column1,@Column2,@Column2)",destinationConnection),destinationAdapter As New OleDbDataAdapter With {.InsertCommand = destinationCommand}
With destinationCommand.Parameters
.Add("@Column1",OleDbType.Integer,"Column1")
.Add("@Column2",OleDbType.VarChar,50,"Column2")
.Add("@Column3",OleDbType.Date,"Column3")
End With
destinationAdapter.Update(table)
End Using
您只需根据需要修改SQL代码和参数并设置连接字符串。请注意,我已经对SQL代码中的列名进行了转义,如果您使用保留字或特殊字符,则必须这样做。参数前缀和标识符转义符可能因数据库而异。
我还应该指出将AcceptChangesDuringFill
设置为False
的重要性。如果您不这样做,则AcceptChanges
方法将隐式调用Fill
,而您的所有DataRows
将是Unchanged
,因此将没有任何内容可插入。通过不调用AcceptChanges
,您将离开Added
的每一行并准备插入。