OleDb 参数到 OleDbCommand 不传递到查询

OleDb Parameter Into OleDbCommand Not Passing into Query

我正在尝试将一串数字传递到一个查询中,该查询将 运行 针对我们的 AS400 连接,但我的值似乎并没有真正进入查询。当我调试到参数点时,我返回了一个结果,所以我知道我得到了我的号码。

var command = new OleDbCommand("SELECT UMACT, UMCUS, UMNAM, UMAD1, UMAD2, UMAD3, UMZIP, UMOPH, UMSLC FROM CFFILES.UMST WHERE trim(UMEMT) = '?' ", connection);
                //Test meter number: 59115796
                connection.Open();
                OleDbParameterCollection paramCollection = command.Parameters;
                paramCollection.Add(meternumber.ToString(), OleDbType.LongVarChar);

当我将一个数字直接传递给查询时,它 returns 是一个完美的结果,但是当我尝试从参数传递一个数字时,它 returns 为空。

这是我知道传递给我在上面创建的参数的变量本身,因为当我调试到该行时我得到了一个结果。

public IEnumerable<CustomerInfoModel> GetCustomerInfo()
{
    int meternumber = 59115796;
    getAS400Data(meternumber);
    return customerList;
}

要使我的 AS400 查询正常工作,我必须在 ?在查询中,所以我不确定这是否可能导致问题。

您对 Add 方法的调用有误。 Add的第一个参数是参数的Name,第二个是DataType,最后应该这样设置参数的值

OleDbParameterCollection paramCollection = command.Parameters;
paramCollection.Add("whatever", OleDbType.LongVarChar).Value = meternumber.ToString();

See OleDbParameterCollection.Add

不,您不应该在问号占位符周围添加刻度。如果你这样做,你将你的占位符转换为文字字符串,显然你没有任何带有问号作为值的行。

最后一点,在 OleDb 中,参数没有名称,但是当您将它们添加到您的集合中时,您应该提供一个名称,这样您就可以自由选择您喜欢的名称。请记住让它们保持与占位符 (?) 在查询字符串中出现的顺序相同