我是一名初学程序员,请与我同行。我想看看我的excel电子表格中的这个单元格是否是数据库中的PK。我使用Aspose来引入excel文件(这是有效的)。我知道连接字符串也正常工作。
我想查询数据库中的代码。如果此代码返回一行,我希望该标志为true。如果没有行返回,我想继续,因为标志已经设置为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
答案 0 :(得分:0)
你应该使用返回IEnumerable的ExecuteQuery方法。
然后你可以通过写:
来测试结果var result = pbkDB.ExecuteQuery(dbCommand);
flag = result.Count() > 0;
答案 1 :(得分: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;
}