class DBConnection
안에 다음과 같은 방법이 있습니다. 내가 쿼리를 실행할 수 있도록 연결을 열 때 SQLiteConnection conn = DBConnection.OpenDB();
과 같은 메서드를 호출합니다. 연결을 닫을 때 비슷한 메서드를 호출 할 수 있습니다.데이터베이스가 없으면 SQLite 연결이 실패합니까? (삭제/이동)
방법 :
public static SQLiteConnection OpenDB()
{
try
{
//Gets connectionstring from app.config
string myConnectString =
ConfigurationManager.ConnectionStrings[
"LegMedSQLLite.Properties.Settings.LegMedSQLLiteDBConnectionString"].ConnectionString;
var conn = new SQLiteConnection(myConnectString);
conn.Open();
return conn;
}
catch (SQLiteException e)
{
MessageBox.Show(e.ToString(), "TEST");
return null;
}
}
이 모든 벌금과 멋쟁이 작동합니다. 문제는 try-catch입니다. 다음 시나리오를 가정 해 보겠습니다.
- 데이터베이스 파일은 이동/삭제되었습니다.
예외가 발생하지 않습니다. 실제로, 내가 처음 비틀 거리는 첫 번째 캐치는 내 첫 쿼리를 실행할 때입니다.이 테이블에서는 테이블이없고 자체 예외가 throw됩니다. 나는이 이상한 현상에 놀랐다. 그러나 곧 SQLite가 새로운 빈을 생성한다는 것을 알게되었다. 데이터베이스. 비어 있음이란 테이블이 없음, 아무 것도 없으며, 거기에 있어야만했던 이전 데이터베이스와 동일한 이름을 가진 SQLite 데이터베이스 파일입니다.
이 문제는 응용 프로그램이 SQLiteConnection conn = DBConnection.OpenDB();
으로 전화하자 마자 잘못된 것이 있는지 (데이터베이스를 찾을 수 없음, 손상됨, 다른 프로세스에서 사용 중인지 등) 알기를 원합니다.
당연히 필자는 필자의 방법으로 File.Exists를 호출 할 수는 있지만 적절한 해결책이 아닌 것 같습니다. 어떤 도움이 필요합니까?
그래로 변환 할 수 있습니다 생각에서 연결 문자열이 있다고 가정합니다! 그러나이 작업은 전적으로 System.Data.SQLite가 아닌 것 같습니다. 나는 SQLite 웹 서버가 사용하는 것을 알고있다. 또한 SQL 쿼리 아이디어도 생각해 봤지만 낭비처럼 보입니다. 이 작업을 수행하는 데 "적절한"방법이 없다면 대답을 승인 된 대답으로 표시 할 것입니다. – CasperT