我正在尝试确定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;
答案 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脚本或存储过程时,您需要编译更改,否则在查看代码时您将看到更改,而不是尝试执行存储过程的调用者。