OleDb参数进入OleDbCommand不进入查询

时间:2015-06-08 16:08:11

标签: c# .net asp.net-web-api asp.net-web-api2

我试图将一串数字传递给一个将针对我们的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);

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

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

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

为了让我的AS400查询工作,我必须在周围打勾?在查询中,所以我不确定这是否可能导致问题。

1 个答案:

答案 0 :(得分:1)

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

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

See OleDbParameterCollection.Add

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

最后一点,在OleDb参数中没有名称,但是当你将它们添加到你的收藏中时,你应该提供一个,这样你就可以随意选择你喜欢的名字了。只需记住将它们保留在占位符(?)出现在查询字符串

中的顺序中