如何解决查询返回值时,OleDbCommand.ExecuteScalar返回null
我在使用OleDbCommand.ExecuteScalar()时遇到问题。
这是我的查询。
SELECT SUM(gobg.quan / d.coef) as quan
FROM ((N_GOODS_EXTCODES AS nge
INNER JOIN DRUGS AS d ON nge.ec_NZOK20190816 = d.DrugCode)
INNER JOIN N_GOODS AS ng ON nge.good_code = ng.code)
INNER JOIN G_OBGS AS gobg ON ng.smg_id = gobg.smg_id
WHERE nge.ec_NZOK20190816 = "AF063" AND gobg.part_num LIKE 'KR72K35*' ;
当我在MS ACCESS中执行它时,这是返回的值。
这是我的C#代码
public double getGoodQuan(string goodCode,string goodPart,string pharmNzokList)
{
double result = 0;
using (OleDbConnection con = new OleDbConnection(connectionStringBuffer))
{
try
{
con.Open();
using (OleDbCommand cmd = new OleDbCommand(Queries.getGoodQuan(goodCode,goodPart,pharmNzokList),con))
{
result = Convert.ToDouble(cmd.ExecuteScalar());
}
}
catch (Exception ex)
{
Program.ErrorLog(ex.Message,this.GetType().Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name);
}
finally
{
con.Close();
}
}
return result;
}
public static string getGoodQuan(string goodCode,string pharmNzokList)
{
string result = "SELECT SUM(gobg.quan / d.coef) " +
"FROM ((N_GOODS_EXTCODES AS nge " +
"INNER JOIN DRUGS AS d ON nge." + pharmNzokList + " = d.DrugCode) " +
"INNER JOIN N_GOODS AS ng ON nge.good_code = ng.code) " +
"INNER JOIN G_OBGS AS gobg ON ng.smg_id = gobg.smg_id " +
"WHERE nge." + pharmNzokList + " = \"" + goodCode + "\" " +
"AND gobg.part_num LIKE '" + goodPart + "*' " +
";";
return result;
}
cmd.ExecuteScalar()之后的结果为空。
我尝试使用字符串,双精度对象,对象,结果却完全一样。
在同一项目中,我使用相同的代码,但查询不同,并且可以正常工作。
这是有效的查询。
SELECT SYS_PHARMA.pharm_nzok_list FROM SYS_PHARMA;
这是MS ACCESS结果
我第一个离开的查询返回的错误是什么?
解决方法
我找到了问题所在。
在WHERE子句中,我在文本末尾使用*
作为LIKE运算符,因为我想搜索以该文本开头的所有内容(如MS Access文档所述)。
gobg.part_num LIKE 'KR72K35*'
然后我将*
更改为%
并成功了! ExecuteScalar()返回正确的值!
gobg.part_num LIKE 'KR72K35%'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。