首页 > 解决方案 > 当查询返回值时,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 goodPart, 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 结果

查询结果

我在第一个返回 null 的查询时做错了什么?

标签: c#visual-studio-2012

解决方案


我发现问题出在哪里。

在 WHERE 子句中,我在文本末尾使用 LIKE 运算符,*因为我想搜索以该文本开头的所有内容(如 MS Access 文档所述)。

gobg.part_num LIKE 'KR72K35*'

然后我改成*%,它起作用了!ExecuteScalar() 返回正确的值!

gobg.part_num LIKE 'KR72K35%'

推荐阅读