C# 针对OraOLEDB.ORACLE准备了带有类似REGEXP_的语句
我有一个奇怪的情况。准备好的语句返回0行,使用字符串连接生成的同一语句返回预期的15行C# 针对OraOLEDB.ORACLE准备了带有类似REGEXP_的语句,c#,oracle,prepared-statement,sql-like,C#,Oracle,Prepared Statement,Sql Like,我有一个奇怪的情况。准备好的语句返回0行,使用字符串连接生成的同一语句返回预期的15行 string mappingsTable = "MySchema.MyMappingsTable"; string sourceTablename = "Zone1_12345"; string destinTablename = "SurveyABC_result"; 这个函数工作并返回15行 DataTable mappings = new DataTable(); OleDbCommand cmd =
string mappingsTable = "MySchema.MyMappingsTable";
string sourceTablename = "Zone1_12345";
string destinTablename = "SurveyABC_result";
这个函数工作并返回15行
DataTable mappings = new DataTable();
OleDbCommand cmd = MyOleDbConnection.CreateCommand();
cmd.CommandText
= "select * from " + mappingsTable
+ " where regexp_like('" + sourceTablename + "', SourceNamePattern, 'i')"
+ " and UPPER(destinTablename) = UPPER('" + destinTablename + "')";
new OleDbDataAdapter(cmd).Fill(mappings);
这个函数运行(无异常)并返回0个零行!@#$%?Grr
你知道为什么准备好的语句没有行吗?我不知所措:(您使用的
OleDbParameter
的构造函数重载将参数名称和参数类型作为输入。因此基本上您没有传递实际值。请更改代码,如下所示:
DataTable mappings = new DataTable();
OleDbCommand cmd = MyOleDbConnection.CreateCommand();
cmd.CommandText
= "select * from " + mappingsTable
+ " where regexp_like(?, SmHeatLikePattern, 'i')"
+ " and UPPER(destinTablename) = UPPER(?)";
OleDbParameter param1 = cmd.Parameters.Add(sourceTablename, OleDbType.VarChar);
param1.Value = sourceTablename;
OleDbParameter param2 = cmd.Parameters.Add(destinTableName, OleDbType.VarChar);
param2.Value = destinTableName;
new OleDbDataAdapter(cmd).Fill(mappings);
可能,该列是
CHAR
数据类型。您可能需要使用RPAD(上限(?),您的列长度)
,并且regexp\u like
的第二个参数不同…SourceNamePattern和SmHeatLikePattern…对吗?我已经编辑了您的标题。请参阅“”,其中的共识是“不,它们不应该”。存储在SourceNamePattern
和SmHeatLikePattern
中的值是否相同?如果它们持有不同的值,则两个查询肯定会不同。
DataTable mappings = new DataTable();
OleDbCommand cmd = MyOleDbConnection.CreateCommand();
cmd.CommandText
= "select * from " + mappingsTable
+ " where regexp_like(?, SmHeatLikePattern, 'i')"
+ " and UPPER(destinTablename) = UPPER(?)";
OleDbParameter param1 = cmd.Parameters.Add(sourceTablename, OleDbType.VarChar);
param1.Value = sourceTablename;
OleDbParameter param2 = cmd.Parameters.Add(destinTableName, OleDbType.VarChar);
param2.Value = destinTableName;
new OleDbDataAdapter(cmd).Fill(mappings);