将数据从SQL Server转换为DBF文件日期错误

问题描述

我想将数据从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的每一行并准备插入。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...