为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8_20240712_x86_rh7_64
【操作系统】:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
【CPU】: i5-10400F
【问题描述】*:SqlServer兼容模式下,即设置
alter system set 'COMPATIBLE_MODE' =3 spfile;
sp_set_para_value(2,'MS_PARSE_PERMIT',2);
两个选项后,使用C#进行查询
static void Main(string[] args)
{
DmParameter[] parameters = new[]
{
new DmParameter("@id", "1")
};
var infoSet = DmSqlHelper.GetDataSet(DbConn, CommandType.Text, "select * from address where ADDRESSID = @id", parameters);
foreach (DataTable table in infoSet.Tables)
{
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(column.ColumnName + ":" + row[column]);
}
}
}
}
提示
未经处理的异常: Dm.DmException: 第1 行附近出现错误:
参数个数不匹配 [sql]: {select * from address where ADDRESSID = @id}; [params]: {@id=1};
如果去掉 where ADDRESSID = @id部分则执行正常
可以参考以下方法传参调用:
string connectionString = "你的数据库连接字符串";
string sql = "select * from address where ADDRESSID = @id"; // 使用参数化查询
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "id";
parameter.Value = 1; // 假设我们要查询 id 为 1 的用户
DataSet dataSet = DmSqlHelper.GetDataSet(connectionString, sql, parameter);

sql拿出来单独再达梦数据库执行下,如果执行成功,可能是数据库驱动的问题,看看传参是否正确?