Oracle11g 遭遇;ORA-01745:无效的主机/绑定变量名“;将DbDataAdapter.Update()与ODP.NET一起使用时
我在oracle 11g中定义了一个表,其中包含以下语句:Oracle11g 遭遇;ORA-01745:无效的主机/绑定变量名“;将DbDataAdapter.Update()与ODP.NET一起使用时,oracle11g,datatable,odp.net,Oracle11g,Datatable,Odp.net,我在oracle 11g中定义了一个表,其中包含以下语句: CREATE TABLE "TESTUSER"."TestTableOracleWriter" ("name" VARCHAR2(100 BYTE), "group" VARCHAR2(100 BYTE), "number" NUMBER(*,0), "creation" DATE, "sliceidentifier" RAW(100), CONSTRAINT "TESTTABLEORA
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"))
我使用以下代码片段使用dataTable中的内容更新表:
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:invalid host/bind variable name”失败,我在互联网上搜索过,发现一些资料说这与oracle保留字有关。从中,“名称”、“组”和“编号”标记为保留字。我可以更改表列名以使代码正常工作
但最奇怪的是,代码并非总是失败,它只在dataTable只包含一行时失败,在其他场景中,它按预期工作。有人对此有想法吗?您不能使用关键字作为参数名。
不要使用group和number作为参数名能否详细说明为什么不可能?