我正在尝试使用OracleBulkCopy将数据从CSV文件插入Oracle DB。
表架构:
CREATE TABLE CodeDictionary
(
Id RAW(16) default SYS_GUID(),
Code varchar2(100) NULL,
Description varchar2(300) NULL,
Domain varchar2(100) NOT NULL,
constraint PK_CodeDictionary PRIMARY KEY (Id)
) GO
我无法使用BulkCopy插入.Net Guid作为RAW(16)。
这是一段代码:
var dataTable = new DataTable(_tableName);
// csvMapping(dataTable);
dataTable.Columns.Add("Id", typeof(byte[]));
dataTable.Columns.Add("Description", typeof(string));
dataTable.Columns.Add("Code", typeof(string));
dataTable.Columns.Add("Domain", typeof(string));
using (var oracleConnection = new OracleConnection(_connectionString))
{
oracleConnection.Open();
// Create the bulk copy object
var oracleBulkCopy = new OracleBulkCopy(oracleConnection, OracleBulkCopyOptions.UseInternalTransaction)
{
DestinationTableName = _tableName,
BatchSize = _batchsize,
BulkCopyTimeout = _oracleTimeOut
};
oracleBulkCopy.ColumnMappings.Add("Id", "Id");
oracleBulkCopy.ColumnMappings.Add("Description", "Description");
oracleBulkCopy.ColumnMappings.Add("Code", "Code");
oracleBulkCopy.ColumnMappings.Add("Domain", "Domain");
// WHILE (!textFieldParser.EndOfStream)
// Read CSV and Map data HERE.....
dataTable.Rows.Add(formatRow);
// **formatRow** is object[]
// The first element of formatRow is 'Id' and is a byte[] generated in that way:
// var guid = Guid.Parse("GUID_READ_FROM_CSV")
// guid.ToByteArray();
// END WHILE
oracleBulkCopy.WriteToServer(dataTable);
oracleConnection.Close();
}
这段代码给了我这个例外:
ORA-00600:内部错误代码,参数:[kpudpxp_isSid-2],[],[],[],[],[],[],[],[],[],[ ],[]
我试图创建没有RAW(16)的表,而BulkCopy可以完美地工作,所以我认为问题出在 Guid-> byte []-> RAW(16)。
我也尝试过使用 OracleBinary 类型,但没有成功。
有人知道如何解决这个问题吗? 也许有人已经多次使用过此OracleBulkCopy。 对我来说,这是我第一次使用Oracle PL / SQL。