"选择count()"返回错误的值

时间:2015-03-05 21:05:04

标签: c# oracle11g

我正在尝试确定Oracle数据库表中是否存在特定值。 我使用了一个带有“select count(*)”,“select count(1)”并选择count(< col_name>)的查询“但是一直得到错误的结果。当我使用SQL Developer并运行查询时,我得到零但是,在DAL中,我得到1.我猜它是返回行数而不是计数本身。我尝试了executeScalar()和ExecuteReader()。

public override bool zipExists(string sZipCode)
{
    OracleConnection conn = new OracleConnection(this.OraDataConnectionString);
    OracleCommand oraCmd = new OracleCommand();
    decimal iNumEntries = 0;
    string sQuery = "select count(ZIPCODEID) as ZipCount from ZIPCODE where ZIPCODE = :ZipCode";
    SetOraCommandType(oraCmd, CommandType.Text, sQuery);

    conn.Open();
    oraCmd.Connection = conn;
    oraCmd.BindByName = true;
    AddParamToOraCmd(oraCmd, "ZipCode", OracleDbType.Varchar2, 11, ParameterDirection.Input, sZipCode);

    using (OracleConnection cn = new OracleConnection(this.OraDataConnectionString))
    {
        oraCmd.Connection = cn;
        cn.Open();
        iNumEntries = (decimal)oraCmd.ExecuteScalar();
    }
    return iNumEntries > 0;

也尝试过:

    OracleDataReader sqlReader = oraCmd.ExecuteReader();
    try
    {
        if (sqlReader.Read())
        {
            if (sqlReader["ZipCount"] != DBNull.Value)
                iNumEntries = Convert.ToInt16(sqlReader["ZipCount"]);
        }
    }
}
return iNumEntries > 0;

1 个答案:

答案 0 :(得分:0)

我尝试在我的桌子上编写代码,但指向某个列,并从PSLAT.FSDEV.dbo.PS_EN_GEN_INTFC_BI中选择计数(EN_Qty)作为ZipCount,其中EN_Qty ='2600'在我的末尾工作,所以代码中的确切位置是你遇到问题..?我用你的查询替换了我的表并为where子句分配了一个值..所以你查询看起来正确..但是我会通过查询来查看你是否缺少一个zipcode ..还是oraCmd.ExecuteScalar()只返回1行,所以请确保你没有返回多行..这样很有趣。

将您的代码更改为以下

object bExists = oraCmd.ExecuteScalar(); 
var bexists = bExists != DBNull.Value && result != null; 

或更改您的代码以检查row.count> 0如果为true,那么你知道找到了zipcode。请记住,在Oracle中更改Sql脚本或存储过程时,您需要编译更改,否则在查看代码时您将看到更改,而不是尝试执行存储过程的调用者。