我试图将一串数字传递给一个将针对我们的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查询工作,我必须在周围打勾?在查询中,所以我不确定这是否可能导致问题。
答案 0 :(得分:1)
您对Add方法的调用有误。 Add的第一个参数是参数的名称,第二个参数是DataType,最后你应该用这种方式设置参数的值
OleDbParameterCollection paramCollection = command.Parameters;
paramCollection.Add("whatever", OleDbType.LongVarChar).Value = meternumber.ToString();
See OleDbParameterCollection.Add
不,不应该在问号占位符周围添加刻度。如果你在一个文字字符串中转换占位符,显然你没有任何带有问号的行作为值。
最后一点,在OleDb参数中没有名称,但是当你将它们添加到你的收藏中时,你应该提供一个,这样你就可以随意选择你喜欢的名字了。只需记住将它们保留在占位符(?)出现在查询字符串
中的顺序中