2013-10-23 4 views
0

나는 초보 프로그래머이므로 맨손으로하십시오. Excel 스프레드 시트의이 셀이 데이터베이스의 PK인지 확인하려고합니다. Aspose를 사용하여 Excel 파일 (이 작동)을 가져오고 있습니다. 나는 연결 문자열이 잘 작동하고 있음을 알고 있습니다.C#을 사용하여 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

당신은 같은에 쿼리를 변경해야합니다 :

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

경우에만 경우 신경 때마다 필드를 선택 할 필요가 없습니다 레코드가 존재합니다.

은 그럼 당신은

flag = count > 0;  

그래서 (당신이 경우 더 이상 필요하지 않습니다) 그런 다음에 플래그의 설정을 변경

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

처럼 뭔가에

pbkDB.ExecuteNonQuery(dbCommand); 

변경 새 코드는 다음과 같이 보입니다.

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; 

}

+0

감사합니다. 그것은 완벽하게 작동했습니다! – Katherine

0

IEnumerable을 반환하는 ExecuteQuery 메서드를 사용해야합니다.

당신은 서면으로 결과를 테스트 할 수 있습니다

var result = pbkDB.ExecuteQuery(dbCommand); 
flag = result.Count() > 0; 
+0

오류가 발생합니다. " 'ExecuteQuery'라이브 템플릿 세션의 활성 핫스팟 기호를 해결할 수 없습니다." – Katherine

관련 문제