为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:7.0
【操作系统】:linux
【CPU】:未知
【问题描述】*:dotnet驱动DM.DmProvider,如果where条件中bool类型参数单独作为条件之一,会报错:查询使用值表达式作为过滤条件。
其他数据库的驱动如pg的都是没有问题的。
下面是示例代码:
class Program
{
static void Main()
{
string connectionString = "Server=127.0.0.1;Port=5236;User Id=SYSDBA;Password=SYSDBA;Database=MYDB;";
using (DmConnection connection = new DmConnection(connectionString))
{
connection.Open();
string sql = "SELECT ID, NAME, AGE FROM USERS WHERE :p0 AND AGE > :p1";//注意这里的p0参数单独一个条件就报错,当然我改成:p0=1可以解决问题,但是efcore生成的数据不带=1的
using (DmCommand command = new DmCommand(sql, connection))
{
command.Parameters.Add(new DmParameter(":p0", true));//这个参数单独作为条件之一会报错
command.Parameters.Add(new DmParameter(":p1", 18));
using (DmDataReader reader = command.ExecuteReader())//ExecuteReader这个方法报错了
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
int age = reader.GetInt32(2);
Console.WriteLine($"{id}\t{name}\t{age}");
}
}
}
}
}
}
此问题的引发原因是,你的sql里面p0只是引入了传参,但是没有对具体值做处理导致的,建议在sql层面对p0值做一下处理,类似于p2这种,看能否解决此问题。