gpt4 book ai didi

oracle11g - 在 ODP.NET 中使用 DbDataAdapter.Update() 时遇到 "ORA-01745: invalid host/bind variable name"

转载 作者:行者123 更新时间:2023-12-02 23:59:29 24 4
gpt4 key购买 nike

我在 oracle 11g 中定义了一个表,其中包含以下语句:

  CREATE TABLE "TESTUSER"."TestTableOracleWriter" 
("name" VARCHAR2(100 BYTE),
"group" VARCHAR2(100 BYTE),
"number" NUMBER(*,0),
"creation" DATE,
"sliceidentifier" RAW(100),
CONSTRAINT "TESTTABLEORACLEWRITER_PK" PRIMARY KEY ("name"))

我使用以下代码片段来使用数据表中的内容更新表格:

    private void BatchInsert(DbConnection connection, DbTransaction transaction, DataTable dataTable, string tableName)
{
DbDataAdapter adapter = ProviderFactories.GetFactory("Oracle.DataAccess.Client").CreateDataAdapter();
DbCommand insertCommand = connection.CreateCommand();

DbParameter parameter1 = insertCommand.CreateParameter();
parameter.DbType = DbType.String;
parameter.ParameterName = "@name";
parameter.SourceColumn = "name";
insertCommand.Parameters.Add(parameter);

DbParameter parameter2 = insertCommand.CreateParameter();
parameter2.DbType = DbType.String;
parameter2.ParameterName = "@group";
parameter2.SourceColumn = "group";
insertCommand.Parameters.Add(parameter2);

DbParameter parameter3 = insertCommand.CreateParameter();
parameter3.DbType = DbType.Int32;
parameter3.ParameterName = "@number";
parameter3.SourceColumn = "number";
insertCommand.Parameters.Add(parameter3);

DbParameter parameter4 = insertCommand.CreateParameter();
parameter4.DbType = DbType.DateTime;
parameter4.ParameterName = "@creation";
parameter4.SourceColumn = "creation";
insertCommand.Parameters.Add(parameter4);

insertCommand.CommandType = CommandType.Text;
insertCommand.CommandText = "INSERT INTO \"TestTableOracleWriter\" (\"name\", \"group\", \"number\", \"creation\") VALUES (:name, :group, :number, :creation)";
insertCommand.Transaction = transaction;
insertCommand.UpdatedRowSource = UpdateRowSource.None;

adapter.InsertCommand = insertCommand;
adapter.UpdateBatchSize = 0;
adapter.Update(dataTable);
}

但有时代码会失败,出现“ORA-01745:无效的主机/绑定(bind)变量名”,我在网上搜索了一下,发现一些资料说这与oracle有关保留字。来自 link 、“名称”、“组”和“号码”被标记为保留字。我可以更改表列名称以使代码正常工作。

但最奇怪的是,代码并不总是失败,只有当 dataTable 仅包含一行时才会失败,在其他情况下,它会按预期工作。有人对此有什么想法吗?

最佳答案

不能使用关键字作为参数名称。不要使用组和数字作为参数名称

关于oracle11g - 在 ODP.NET 中使用 DbDataAdapter.Update() 时遇到 "ORA-01745: invalid host/bind variable name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34524043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com