使用C#查询从Excel文件比较单元格的数据库

时间:2013-10-23 17:04:31

标签: c# sql excel

我是一名初学程序员,请与我同行。我想看看我的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

2 个答案:

答案 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;

}