Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对OraOLEDB.ORACLE准备了带有类似REGEXP_的语句_C#_Oracle_Prepared Statement_Sql Like - Fatal编程技术网

C# 针对OraOLEDB.ORACLE准备了带有类似REGEXP_的语句

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 =

我有一个奇怪的情况。准备好的语句返回0行,使用字符串连接生成的同一语句返回预期的15行

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);