0

我正在尝试查看我的 excel 电子表格中的这个单元格是否是数据库中的 PK。我正在使用 Aspose 引入 excel 文件(这有效)。我知道连接字符串也可以正常工作。

我想在数据库中查询此代码。如果此代码返回一行,我希望该标志为真。如果没有行返回,我想继续,因为标志已经设置为 false。我试过了,尽管该代码不在数据库中,但我一直保持真实。有人可以帮我让它正常工作吗?或者有没有更简单的方法来完成这项任务?

#region StateCharges_Status
public static bool StateCharges_Status(DataRow dr) {
    bool ok = StateCharges_Exists(dr);
    if (ok)
        return StateCharges_Update(dr);
    else
        return StateCharges_Insert(dr);
}
#endregion

#region StateCharges_Exists
private static bool StateCharges_Exists(DataRow dr) {
    bool flag = false;
    Database pbkDB = DatabaseFactory.CreateDatabase("PbKConnectionString");
    DbCommand dbCommand = pbkDB.GetSqlStringCommand(string.Format(@"Select * from tblCtStateCharges where code = '{0}'", dr["Code"].ToString()));
    try {
        pbkDB.ExecuteNonQuery(dbCommand);
        flag = true; // <-- I guess this is where it needs something added.
    } catch (Exception ex) {
        Console.WriteLine(ex.ToString());
    }
    return flag;
}
#endregion
4

2 回答 2

0

您应该使用返回 IEnumerable 的 ExecuteQuery 方法。

然后你可以通过编写来测试结果:

var result = pbkDB.ExecuteQuery(dbCommand);
flag = result.Count() > 0;
于 2013-10-23T17:16:49.603 回答
0

您应该将查询更改为:

 DbCommand dbCommand = pbkDB.GetSqlStringCommand(string.Format(@"Select count(*) as cnt      from tblCtStateCharges where code = '{0}'", dr["Code"].ToString()));

当您只关心记录是否存在时,无需选择每个字段。

然后你改变

 pbkDB.ExecuteNonQuery(dbCommand);

类似于

 int count = (int)pbkDB.ExecuteScalar(dbCommand);

然后将标志的设置更改为(您不再需要 if 了)

  flag = count > 0;    

所以新代码看起来像

 private static bool StateCharges_Exists(DataRow dr) {
 bool flag = false;
 Database pbkDB = DatabaseFactory.CreateDatabase("PbKConnectionString");
 DbCommand dbCommand = pbkDB.GetSqlStringCommand(string.Format(@"Select count(*) as cnt from   tblCtStateCharges where code = '{0}'", dr["Code"].ToString()));
 try {
    int count = (int)pbkDB.ExecuteScalar(dbCommand);
   flag = count > 0; 
 } catch (Exception ex) {
    Console.WriteLine(ex.ToString());
 }
 return flag;

}

于 2013-10-23T18:50:52.667 回答