与PostgreSql的Npgsql连接:Array数据类型

时间:2016-06-07 10:42:27

标签: arrays postgresql npgsql

我使用Visual Basic在Visual Studio 2015中工作。我使用Npgsql连接到PostgreSql数据库。 Array数据类型似乎有问题 - 或者希望我做错了什么。我的一些代码:

Dim aWriter As Npgsql.NpgsqlBinaryImporter

Dim Keys() As String

N_Domain = UBound(myKey_Name, 1)
N_Record = UBound(myKey_Name, 2)

ReDim Keys(0 To N_Domain - 1)

aWriter = Connect.BeginBinaryImport _
          ("COPY ""GAMS Sets"" FROM STDIN (FORMAT BINARY)")
For Rec = 1 To N_Record
    For Dom = 1 To N_Domain
        Keys(Dom - 1) = myKey_Name(Dom, Rec)
    Next Dom
    aWriter.StartRow()
    aWriter.Write(myCase, NpgsqlDbType.Text)
    aWriter.Write(SyId, NpgsqlDbType.Text)
    aWriter.Write(Keys, NpgsqlDbType.Array Or NpgsqlDbType.Text)
Next Rec

aWriter.Dispose()
aWriter.Close()

当我运行代码时,我在aWriter.Dispose()时遇到错误: {“42804:错误的元素类型”},ErrorCode:-2147467259。

有什么问题?是不是支持文本阵列?

错误详情:

Npgsql.PostgresException was unhandled
  BaseMessage=wrong element type
  Code=42804
  ErrorCode=-2147467259
  File=arrayfuncs.c
  HResult=-2147467259
  InternalPosition=0
  Line=1306
  Message=42804: wrong element type
  MessageText=wrong element type
  Position=0
  Routine=array_recv
  Severity=ERROR
  Source=Npgsql
  SqlState=42804
  [Where]=COPY GAMS Sets, line 1, column Keys
  StackTrace:
       at Npgsql.NpgsqlConnector.DoReadMessage(DataRowLoadingMode dataRowLoadingMode, Boolean isPrependedMessage)
       at Npgsql.NpgsqlConnector.ReadMessageWithPrepended(DataRowLoadingMode dataRowLoadingMode)
       at Npgsql.NpgsqlConnector.ReadExpecting[T]()
       at Npgsql.NpgsqlBinaryImporter.Close()
       at Npgsql.NpgsqlBinaryImporter.Dispose()
       at ConsoleApplication1.Module1.HVL_Write_Set(String myCase, Int32 SyNr, String SyId, Int32 Dimen, String[] myDomain_Name, String[,] myKey_Name) in \\dtu-storage\hela\Documents\Visual Studio 2015\Projects\GDX API 5\GDX API 5\Module1.vb:line 305
       at ConsoleApplication1.Module1.Main() in \\dtu-storage\hela\Documents\Visual Studio 2015\Projects\GDX API 5\GDX API 5\Module1.vb:line 638
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

0 个答案:

没有答案