我想执行以下代码。我无法将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 TABLE中的列定义为
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
答案 0 :(得分:0)
我用“?”替换命名变量代码工作
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)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(2)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(3)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(4)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(5)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(6)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(7)
cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.ParseExact(Row(8), "dd.MM.yyyy", Nothing)
cmd.Parameters.Add("?", OleDbType.Date).Value = DateTime.ParseExact(Row(9), "dd.MM.yyyy", Nothing)
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Row(10)