복붙노트

[SQL] C # 데이터 연결 모범 사례?

SQL

C # 데이터 연결 모범 사례?

좋아, 그래서이 의견을 고집 주제의 그런 종류의 하나이지만, 지식, 의견, 그리고 현재의 관행에 따라, 다음과 같은 시나리오를 설정하는 가장 좋은 방법은 무엇입니까?

나는 광범위한 데이터 입력 응용 프로그램을 짓고 있어요, 광범위한으로 나는 단지 전체 프로그램의 약 15-25%을 통합 기본 설정을 가지고 내가 부분적으로 설치됩니다 (15)에 대한 형태를 의미한다. 나는 데이터의 MMO의 가치를 저장하고 있지 않다, 나는 정말 더 광대 한 데이터베이스를 필요가 없습니다 내 백엔드 데이터베이스로 SQL 콤팩트 4.0을 사용하고 (그들은 여전히 ​​작업을 필요로), 순간이는 로컬 응용 프로그램입니다 .

그렇다면, 난 그냥 메뉴 시스템을 기반으로 다양한 다른 페이지로 변경하는 하나의 창으로 표시하도록 설정할 수 있도록 싶지만, 나는이 성취 될 것입니다 방법에 대한 좋은 자습서를 찾을 수 없습니다 사람이 어떤 알고, 가르치 려하시기 바랍니다.

문제의 시나리오 그러나, 데이터베이스에 연결하는 방법입니다. 나는 2 SQLCE 데이터베이스, 하나를 사용하고 그 상점 일정한 서비스와 직원을 기반으로 데이터, 두 번째가 저장 끊임없이 변화하는 데이터 또는 첫 번째 데이터베이스를 기반으로 입력의 새로운 데이터입니다. 나는 모든 다른 형태에서 상속하는 BaseForm을 보유하고있는이 최대를 설정하는 방법에 대한 다양한 방법과 현재 내가 사용하고 하나를 보았다. BaseForm I 내에 포함 반복되는 코드의 양을 최소화하는 여러 형태에 공통되는 방법 및 변수를 갖는다.

이 연결을 모두 데이터베이스에 문자열, 그 중 하나에 대한 연결을 열 두 가지 방법이 포함되어 있습니다. 그래서 같이 :

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);
            }
        }

나는 열려있는 연결을 필요로 할 때마다 그 때 나는 단순히 열린 연결 방법을 호출 할 것과 데이터베이스 I 필요 액세스에 대응하고 가까운 그것을 마지막으로 문이다. 이런 방식으로 연결이 필요한 바로 그 때, 아주 오랫동안 결코 열려 있습니다. 물론이 수단의 열린 연결 방법에 대한 호출이 많이 있습니다. 따라서이 시나리오 이런 종류의 구현, 또는 더 나은 방법이있다하는 가장 좋은 방법은?

그것은 조금만 더 가까이 다음 때 양식 닫히고 양식로드되는 즉시 연결을 열고 있나요? 나는 한 번에 열려있는 여러 형태의 인스턴스가 각 사람은 아마 한 다음 닫히고을 다른 사람이 바로 망하는 것입니다 그렇다면 데이터베이스에 열려있는 연결을 필요? 아니면 내가 응용 프로그램 출시에 따라 두 데이터베이스에 대한 연결을 열 것인가? 모든 입력을 감상 할 수있다. 감사.

해결법

  1. ==============================

    1.다시 만드는 일반적으로 그들이 비싼 작동되지 않도록 연결이 .NET에 의해 풀링된다. 유지 연결은 그러나, 문제가 발생할 수 있습니다, 오랜 기간 동안 엽니 다.

    다시 만드는 일반적으로 그들이 비싼 작동되지 않도록 연결이 .NET에 의해 풀링된다. 유지 연결은 그러나, 문제가 발생할 수 있습니다, 오랜 기간 동안 엽니 다.

    대부분의 "모범 사례"와 즉시 (데이터의 마지막 비트가 추출 된 직후) 가능한 한 그들을 폐쇄 (오른쪽 어떤 SQL 실행하기 전에) 늦게 가능한 한 열려있는 연결로 알려주십시오.

    이 작업을 자동으로 수행하는 효과적인 방법은 문을 사용하여입니다 :

    using (SqlConnection conn = new SqlConnection(...))
    {
        using(SqlCommand cmd = new SqlCommand(..., conn))
        {
            conn.Open();
            using(DataReader dr = cmd.ExecuteReader())  // or load a DataTable, ExecuteScalar, etc.    
            {
                 ...
            {
        }
    }
    

    이런 방식으로, 자원이 닫히고 예외가 발생하는 경우에도 폐기된다.

    앱을 열거 나 각 양식을 열 때 아마 가장 좋은 방법이 아닌 경우 즉, 연결을 여는.

  2. ==============================

    2.난 그냥 당신이 당신의 데이터베이스 오른쪽에서 물건을 필요로하기 때문에? 나는이 분야의 전문가가 아니에요, 애플리케이션 출시에를 열려면 더 좋은 생각, 그냥 제 생각입니다 ... 좀 비슷한 응용 프로그램을 프로그래밍하고 시작에 연결했다 기본 폼의. 내가 별도의 연결을 만들 수있는 유일한 형태는 로그인 양식이었다.

    난 그냥 당신이 당신의 데이터베이스 오른쪽에서 물건을 필요로하기 때문에? 나는이 분야의 전문가가 아니에요, 애플리케이션 출시에를 열려면 더 좋은 생각, 그냥 제 생각입니다 ... 좀 비슷한 응용 프로그램을 프로그래밍하고 시작에 연결했다 기본 폼의. 내가 별도의 연결을 만들 수있는 유일한 형태는 로그인 양식이었다.

  3. from https://stackoverflow.com/questions/17552829/c-sharp-data-connections-best-practice by cc-by-sa and MIT license