자, 그렇습니다. 이것은 유창한 주제 중 하나입니다. 그러나 지식, 의견 및 현재의 실행에 따라 다음 시나리오를 설정하는 가장 좋은 방법은 무엇입니까?C# 데이터 연결 모범 사례?
광범위한 데이터 입력 응용 프로그램을 구축 중이며 광범위하게 말하면 전체 프로그램의 약 15-25 %를 통합하는 기초 설정 만 있고 부분적으로 설치되는 약 15 개의 양식이 있습니다. (그들은 여전히 작업이 필요합니다.) 백엔드 데이터베이스로 SQL Compact 4.0을 사용하고 있습니다. MMO의 가치가있는 데이터를 저장하지 않기 때문에 더 많은 데이터베이스가 필요하지는 않습니다. 현재로서는 로컬 응용 프로그램입니다. .
메뉴 시스템을 기반으로 다양한 페이지로 바뀌는 단일 창으로 표시되도록 설정할 수 있기를 바랍니다.하지만 그 방법에 대한 좋은 지침서를 찾을 수없는 것 같습니다. 성취 되었으니 아무도 모른다면 나를 가르쳐주세요.
그러나 시나리오는 데이터베이스에 연결하는 방법입니다. 저는 2 개의 SQLCE 데이터베이스를 사용합니다. 하나는 서비스와 스태프를 기반으로하는 상수 데이터를 저장하고, 다른 하나는 끊임없이 변화하는 데이터 또는 첫 번째 데이터베이스를 기반으로 입력 된 새로운 데이터를 저장하는 것입니다. 이 방법을 설정하는 방법에 대한 여러 가지 방법을 보았습니다. 현재 다른 모든 양식에서 상속받은 BaseForm을 사용하고 있습니다. BaseForm 내에서 여러 양식에 공통적 인 메서드와 변수가 있으므로 반복되는 코드의 양이 최소화됩니다.
두 데이터베이스에 대한 연결 문자열과 두 데이터베이스에 대한 연결을 여는 두 가지 방법이 포함됩니다. 그래서 같이 : 나는 열려있는 연결을 필요로 할 때마다
internal SqlCeConnection dataConn = new SqlCeConnection(@"Data Source = |DataDirectory|\opi_data.sdf");
internal SqlCeConnection logConn = new SqlCeConnection(@"Data Source = |DataDirectory|\opi_logs.sdf");
internal SqlCeCommand command;
internal void openDataConnection() // Opens a connection to the data tables
{
try
{
if(dataConn.State == ConnectionState.Closed)
dataConn.Open();
}
catch(SqlCeException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
internal void openLogConnection() // Opens a connection to the log tables
{
try
{
if(logConn.State == ConnectionState.Closed)
logConn.Open();
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
그리고 난 그저 내가에 대한 액세스를 필요로하는 데이터베이스에 해당하는 열린 연결 메소드를 호출 한 다음 마지막으로 성명을 닫습니다. 이 방법으로 연결이 필요할 때 바로 열리지 않습니다. 물론 이것은 열린 연결 방법에 대한 많은 호출이 있음을 의미합니다. 이렇게하면 이런 종류의 시나리오를 구현하는 가장 좋은 방법입니까 아니면 더 좋은 방법이 있습니까?
양식이로드되는 즉시 연결을 열고 양식을 닫을 때 닫는 것이 더 낫습니까? 한 번에 여러 양식이 열려 있고 각각 하나가 데이터베이스에 대한 열린 연결을 필요로하는 인스턴스가 있으므로 하나를 닫으면 다른 인스턴스가 제대로 작동하지 않을 수 있습니까? 아니면 응용 프로그램을 시작할 때 두 데이터베이스 모두에 대한 연결을 열어야합니까? 모든 입력을 부탁드립니다. 감사.
사용 정책에 대한이 질문 참조 http://stackoverflow.com/q/212198/1193596 – Amicable