C# 参数不工作的Oracle SQL?
我熟悉SQL Server,但不熟悉Oracle。我正在使用我在一些示例中发现的数组技术进行批量插入或更新。但是,我一定是做得不对,因为我得到了关于“invalid table.column”的错误。我有一种感觉,这与我试图在内嵌SQL和命令参数中分配参数名的方式有关。在这个例子中,我看到他们对参数使用数值,如“:1,:2,:3”,但如果可能,我希望使用“:parameterName1,:parametername2,:parametername3” 这就是我正在做的C# 参数不工作的Oracle SQL?,c#,sql,oracle,dynamic-sql,C#,Sql,Oracle,Dynamic Sql,我熟悉SQL Server,但不熟悉Oracle。我正在使用我在一些示例中发现的数组技术进行批量插入或更新。但是,我一定是做得不对,因为我得到了关于“invalid table.column”的错误。我有一种感觉,这与我试图在内嵌SQL和命令参数中分配参数名的方式有关。在这个例子中,我看到他们对参数使用数值,如“:1,:2,:3”,但如果可能,我希望使用“:parameterName1,:parametername2,:parametername3” 这就是我正在做的 sbQuery.Appen
sbQuery.Append("update SAP_EMPLOYEE set ");
sbQuery.Append(" EMP_ID = :p_EmployeeId, EVENT_FROM_DT = :p_EventFromDate, EVENT_TYP = :p_EventType, EVENT_RSN = :p_EventRsn,");
sbQuery.Append(" where Emp = :p_Employee");
然后我创建数组将值添加到
string[] arrEmployee = new string[listEmployee.Count];
string[] arrEmployeeId = new string[listEmployee.Count];
DateTime[] arrEventFromDt = new DateTime[listEmployee.Count];
string[] arrEventTyp = new string[listEmployee.Count];
string[] arrEventRsn = new string[listEmployee.Count];
填充数组
int i = 0;
foreach (SAP_EMPLOYEE item in listEmployee)
{
arrEmployee[i] = item.EMP;
arrEmployeeId[i] = item.EMP_ID;
if(item.EVENT_FROM_DT.HasValue)
{
arrEventFromDt[i] = item.EVENT_FROM_DT.Value;
}
arrEventTyp[i] = item.EVENT_TYP;
arrEventRsn[i] = item.EVENT_RSN;
i++;
}
然后调用连接cmd和query
OracleConnection objConnection = new OracleConnection(connString);
using (objConnection)
{
objConnection.Open();
//create Oracle parameters and pass arrays of data
OracleParameter p_Employee = new OracleParameter();
p_Employee.OracleDbType = OracleDbType.Varchar2;
p_Employee.Value = arrEmployee;
OracleParameter p_EmployeeId = new OracleParameter();
p_EmployeeId.OracleDbType = OracleDbType.Varchar2;
p_EmployeeId.Value = arrEmployeeId;
OracleParameter p_EventFromDate = new OracleParameter();
p_EventFromDate.OracleDbType = OracleDbType.Date;
p_EventFromDate.Value = arrEventFromDt;
OracleParameter p_EventType = new OracleParameter();
p_EventType.OracleDbType = OracleDbType.Char;
p_EventType.Value = arrEventTyp;
OracleParameter p_EventRsn = new OracleParameter();
p_EventType.OracleDbType = OracleDbType.Char;
p_EventType.Value = arrEventRsn;
OracleCommand objCmd = objConnection.CreateCommand();
objCmd.CommandText = sbQuery.ToString();
objCmd.ArrayBindCount = arrEmployee.Length;
objCmd.Parameters.Add(p_Employee);
objCmd.Parameters.Add(p_EmployeeId);
objCmd.Parameters.Add(p_EventFromDate);
objCmd.Parameters.Add(p_EventType);
objCmd.Parameters.Add(p_EventRsn);
objCmd.ExecuteNonQuery();
}
看起来在更新列的末尾有一个额外的逗号:…EVENT_RSN=:p_EventRsn,感谢您的查找,但这只是因为我删除了一堆查询。它使用的字段大约有30个,但为了简单起见,我只提取了一小部分的代码。您是否检查了您在Oracle DB中连接的架构是否在指定的表上有适当的权限进行更新,以及您指定的表是否在连接架构中?不确定我到底做了什么来修复它,但我返回并注释掉了大部分代码,只插入了两个字段。这很有效,所以我又添加了两个字段,以此类推,直到所有字段都被添加。现在,我已经开始处理最后一个字段,这是一个日期问题。甲骨文日期和我相处得不太好,但如果我不能很快弄明白的话,我将不得不发布一个单独的问题。