Member 12640308 Ответов: 3

ORA-01008: не все переменные связаны


Я хочу выполнить следующий код.Я не могу вставить csv-файл в базу данных Oracle.Код выдает исключение" ORA-01008: не все переменные связаны".
Может ли кто-нибудь помочь мне с этим


Моя первая строка csv файла выглядит следующим образом

27.06.2016;03.07.2016;1919959100;Pl-Auf  ;081933436-9001;F-600953.01-0021.IR.ALDL-M/01;0030;SWE40700;26.11.2015;26.11.2015;      30 

Я определил столбцы в таблице SAP_ZPCP12 следующим образом



ID                   NUMBER
VONDATUM             DATE
BISDATUM             DATE
AUFTRAG              NUMEBER
DISPOEL              VARCHAR2
MATERIAL             VARCHAR2
BEZEICHNUNG          VARCHAR2
VRG                  VARCHAR2
ARBPLATZ             VARCHAR2
TERMSTART            DATE
TERMENDE             DATE
VORMENGE             NUMBER


Что я уже пробовал:

Imports System.Data.OleDb
Imports System.IO

Module Module1

    Public Function csvToDatatable(ByVal filename As String, ByVal separator As String)

        Dim dt As New System.Data.DataTable
        Dim firstLine As Boolean = True
        If IO.File.Exists(filename) Then
            Using sr As New StreamReader(filename)
                dt.Columns.Add("VONDATUM")
                dt.Columns.Add("BISDATUM")
                dt.Columns.Add("AUFTRAG")
                dt.Columns.Add("DISPOEL")
                dt.Columns.Add("MATERIAL")
                dt.Columns.Add("BEZEICHNUNG")
                dt.Columns.Add("VRG")
                dt.Columns.Add("ARBPLATZ")
                dt.Columns.Add("TERMSTART")
                dt.Columns.Add("TERMENDE")
                dt.Columns.Add("VORMENGE")

                While Not sr.EndOfStream
                    Dim data() As String = sr.ReadLine.Split(separator)
                    dt.Rows.Add(data.ToArray)
                End While
            End Using
        End If
        Return dt

    End Function
    Sub Main()
        Dim path As String = "C:\Users\bhogapud\Desktop\SAP_Transfer\EP1000022179500001final.csv"


        Dim finaldt As DataTable = csvToDatatable(path, ";")

        Dim oledbcn As New OleDbConnection(My.Settings.SQL_Server)
        Dim cmd As New OleDbCommand()
        cmd.CommandType = CommandType.Text

        For Each Row As DataRow In finaldt.Rows
            cmd.CommandText = "Insert into SAP_ZPCP12(ID, VONDATUM, BISDATUM, AUFTRAG, DISPOEL,MATERIAL, BEZEICHNUNG, VRG, ARBPLATZ, TERMSTART, TERMENDE, VORMENGE)
                               values (SEQ_SAP_ZPCP12.NEXTVAL, :VONDATUM, :BISDATUM, :AUFTRAG, :DISPOEL, :MATERIAL, :BEZEICHNUNG, :VRG, :ARBPLATZ, :TERMSTART, :TERMENDE, :VORMENGE )"
            cmd.Parameters.Add(":VONDATUM", OleDbType.Date).Value = DateTime.ParseExact(Row(0), "dd.MM.yyyy", Nothing)
            cmd.Parameters.Add(":BISDATUM", OleDbType.Date).Value = DateTime.ParseExact(Row(1), "dd.MM.yyyy", Nothing)
            cmd.Parameters.Add(":AUFTRAG", OleDbType.Integer).Value = Row(2)
            cmd.Parameters.Add(":DISPOEL", OleDbType.VarChar).Value = Row(3)
            cmd.Parameters.Add(":MATERIAL", OleDbType.VarChar).Value = Row(4)
            cmd.Parameters.Add(":BEZEICHNUNG", OleDbType.VarChar).Value = Row(5)
            cmd.Parameters.Add(":VRG", OleDbType.VarChar).Value = Row(6)
            cmd.Parameters.Add(":ARBPLATZ", OleDbType.VarChar).Value = Row(7)
            cmd.Parameters.Add(":TERMSTART", OleDbType.Date).Value = DateTime.ParseExact(Row(8), "dd.MM.yyyy", Nothing)
            cmd.Parameters.Add(":TERMENDE", OleDbType.Date).Value = DateTime.ParseExact(Row(9), "dd.MM.yyyy", Nothing)
            cmd.Parameters.Add(":VORMENGE", OleDbType.Integer).Value = Row(10)
            cmd.Connection = oledbcn
            oledbcn.Open()
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            oledbcn.Close()

        Next
    End Sub

End Module

3 Ответов

Рейтинг:
5

Member 12640308

Спасибо за ответ Хиллер

Я попробовал твой метод.Я не знаю, почему я все еще получаю то же самое исключение.
Но я попробовал два разных метода, с помощью которых работает мой код.



первый способ

cmd.CommandText = "Insert into SAP_ZPCP12(ID, VONDATUM, BISDATUM, AUFTRAG, DISPOEL,MATERIAL, BEZEICHNUNG, VRG, ARBPLATZ, TERMSTART, TERMENDE, VORMENGE)
                              values (SEQ_SAP_ZPCP12.NEXTVAL,?,?,?,?,?,?,?,?,?,?,? )"
           cmd.Parameters.Add("@VONDATUM", OleDbType.Date).Value = DateTime.ParseExact(Row(0), "dd.MM.yyyy", Nothing)
           cmd.Parameters.Add("@BISDATUM", OleDbType.Date).Value = DateTime.ParseExact(Row(1), "dd.MM.yyyy", Nothing)


вторая методика

cmd.CommandText = "Insert into SAP_ZPCP12(ID, VONDATUM, BISDATUM, AUFTRAG, DISPOEL,MATERIAL, BEZEICHNUNG, VRG, ARBPLATZ, TERMSTART, TERMENDE, VORMENGE)
                              values (SEQ_SAP_ZPCP12.NEXTVAL,?,?,?,?,?,?,?,?,?,?,? )"
           cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.ParseExact(Row(0), "dd.MM.yyyy", Nothing)
           cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.ParseExact(Row(1), "dd.MM.yyyy", Nothing)


Рейтинг:
2

Member 12640308

Я заменил именованные переменные на"? " код работал


Рейтинг:
2

Bernhard Hiller

При добавлении параметров не используйте ":"перед ними просто название колонки, например

cmd.Parameters.Add("VORMENGE", OleDbType.Integer).Value = Row(10)
Вы также можете дополнительно использовать
cmd.BindByName = true;