복붙노트

[SQL] 데이터는 SQL 테이블에 영구적으로 저장되지

SQL

데이터는 SQL 테이블에 영구적으로 저장되지

내가 튜토리얼은 여기에서 찾을 다음 비주얼 스튜디오 익스프레스 2012에서 WPF 응용 프로그램에 대한 C #을 사용하고 있습니다. 나는 testDb.mdf 지역 서비스 기반의 데이터베이스를 만들었습니다. 나는 응용 프로그램을 열고 텍스트, 히트 추가를 입력하고 데이터는 DB에 추가합니다. 나는 기본 키 및 고유로 하나 개의 필드 설정을 가지고 있기 때문에 나는 단지이 알고있다. 내가 다시 같은 일을 추가하려고하면 나는 이미 존재라고 오류가 발생합니다.

나는 데이터베이스에 내 응용 프로그램 아무것도 쇼를 종료합니다. 내가 입력 한 데이터는 사라입니다. 왜 데이터가 영구적이지입니까?

여기에 내 버튼 클릭을 위해 사용하고 코드입니다 :

private void Add_Click(object sender, RoutedEventArgs e)
{
    SqlConnection cn = new SqlConnection(global::testdb.Properties.Settings.Default.testDBConnectionString);
    try 
    { 
        string sql = "INSERT INTO Test (TestInsert) Values('" + txtName.Text + "')";
        SqlCommand cmd = new SqlCommand(sql, cn);
        cn.Open();
        cmd.ExecuteNonQuery();

        MessageBox.Show("Added new record", "Message", MessageBoxButton.OK);
    }
    catch (Exception ex) 
    {
        MessageBox.Show(ex.Message,"Error", MessageBoxButton.OK);
    }
    finally
    {
        cn.Close();
    }
}

연결 문자열 :

<connectionStrings>
    <add name="testdb.Properties.Settings.testDBConnectionString"
        connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\testDB.mdf;Integrated Security=True"
        providerName="System.Data.SqlClient" />
</connectionStrings>

해결법

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

    1.그것은 일반적인 시나리오입니다. DataDirectory를 | 당신은 대체 문자열을 사용하는 연결 문자열을 |. 데스크톱 응용 프로그램에서이 디렉토리는 일반적으로 프로그램이 실행 같은 디렉토리입니다. 비주얼 스튜디오 안에서, BIN \ DEBUG에서 프로그램이 실행 (또는 x86 변형) 디렉토리. 따라서 BIN \ debug 폴더에 프로젝트 디렉토리에서 Visual Studio를 복사합니다 MDF 파일. 당신은 프로젝트가 아닌 폴더에 하나,이 복사본에 레코드를 추가 할 수 있습니다. 그러나 Visual Studio를 서버 탐색기 창은 프로젝트 폴더 데이터베이스를 가리키는 물론, 유물이 비어 있다는 것을 연결이 있습니다.

    그것은 일반적인 시나리오입니다. DataDirectory를 | 당신은 대체 문자열을 사용하는 연결 문자열을 |. 데스크톱 응용 프로그램에서이 디렉토리는 일반적으로 프로그램이 실행 같은 디렉토리입니다. 비주얼 스튜디오 안에서, BIN \ DEBUG에서 프로그램이 실행 (또는 x86 변형) 디렉토리. 따라서 BIN \ debug 폴더에 프로젝트 디렉토리에서 Visual Studio를 복사합니다 MDF 파일. 당신은 프로젝트가 아닌 폴더에 하나,이 복사본에 레코드를 추가 할 수 있습니다. 그러나 Visual Studio를 서버 탐색기 창은 프로젝트 폴더 데이터베이스를 가리키는 물론, 유물이 비어 있다는 것을 연결이 있습니다.

    당신은 폴더 BIN \ DEBUG를 가리키는 서버 탐색기에 다른 연결을 추가하고 데이터베이스가 업데이트되거나되지 않은 것을 확인할 수 있습니다.

    문제를 복잡하게하기 위해, MDF 파일과 연관된 출력 디렉터리에 재산 복사가있다. 이 속성이 당신은 비주얼 스튜디오 내에서 새로운 세션을 시작 복사 항상 매번로 설정되어있는 경우, 파일은 출력 디렉토리 (BIN \ DEBUG) 새로운 빈 하나 이미 복사본을 덮어 쓰기로 프로젝트 폴더에서 다시 복사됩니다. 첫 번째 실행 된가 성공 그래서, 두 번째는 실패합니다. 당신이 관찰 된 증상이 상황의 명확한 표시이다.

    새가, 코드가 잘 작동하는지 간단히 복사 출력 디렉토리에 특성 복사를 변경합니다. (Peraphs는 너무 일찍이지만, 매개 변수화 된 쿼리에 쿼리를 변경해야합니다. 마찬가지로, 당신은 당신의 코드는 단순히, 오말리처럼의 txtName 텍스트 상자에 작은 따옴표를 삽입 SQL 인젝션 해킹을 언급하지 깨질 수 있습니다)

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

    2.나는 당신의 문제는 코드를 삽입하지 생각합니다. 그것은 당신이 데이터베이스 / 테이블을 직접 확인하고있는 방법을합니다. 당신이 뭔가의 테이블에 추가되는 있도록 기본 키 오류를 얻고있는 말을 특히 때문이다.

    나는 당신의 문제는 코드를 삽입하지 생각합니다. 그것은 당신이 데이터베이스 / 테이블을 직접 확인하고있는 방법을합니다. 당신이 뭔가의 테이블에 추가되는 있도록 기본 키 오류를 얻고있는 말을 특히 때문이다.

    당신은 당신이 제대로 테이블보기를 채워 확실합니까? 당신은 당신이 바로 데이터베이스에 적절한 테이블을 확인하고 확실합니까?

  3. ==============================

    3.반드시 초기 카탈로그를 연결 문자열에 설정되어 있는지 확인하고, 당신이 SQL의 오른쪽 서버 / 인스턴스를 가리키는합니다. 당신은 당신이 사용하고있는 동일한 서버 또는 무엇이든 DB 서버에 SQL Server의 여러 인스턴스가있을 수 있습니다. 또한 당신은 물론 오른쪽 테이블에거야 확인합니다.

    반드시 초기 카탈로그를 연결 문자열에 설정되어 있는지 확인하고, 당신이 SQL의 오른쪽 서버 / 인스턴스를 가리키는합니다. 당신은 당신이 사용하고있는 동일한 서버 또는 무엇이든 DB 서버에 SQL Server의 여러 인스턴스가있을 수 있습니다. 또한 당신은 물론 오른쪽 테이블에거야 확인합니다.

    using (SqlConnection cn = new SqlConnection(@"Persist Security Info=False;Integrated Security=true;Initial Catalog=testDB;server=(local)"))
    {           
                string sql = "INSERT INTO Test (TestInsert) Values('" + txtName.Text + "')";
                SqlCommand cmd = new SqlCommand(sql, cn);
                cn.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Added new record", "Message", MessageBoxButton.OK);
    
    }
    

    데이터베이스가 존재하는 SQL 서버 Studio에서 확인하십시오. 내가 직접 인 AttachDBFilename를 사용하여 코드의 파일 이름 MDF를 사용하지 않는 것이 좋습니다. 초기 카탈로그를 사용합니다.

  4. ==============================

    4.글쎄, 나는 해결책을 찾아 냈다. 난 비주얼 스튜디오에 대한 SSDT (SQL Server 데이터 도구)를 설치하여 그것을 해결. 시각적 스튜디오 버전에 따라 설치합니다. 비주얼 스튜디오의 SSDT를 다운로드하는 링크를 따라 이동합니다. https://msdn.microsoft.com/en-us/mt186501

    글쎄, 나는 해결책을 찾아 냈다. 난 비주얼 스튜디오에 대한 SSDT (SQL Server 데이터 도구)를 설치하여 그것을 해결. 시각적 스튜디오 버전에 따라 설치합니다. 비주얼 스튜디오의 SSDT를 다운로드하는 링크를 따라 이동합니다. https://msdn.microsoft.com/en-us/mt186501

  5. ==============================

    5.스티브의 대답의 다음에 당신은 속성 창에서 데이터베이스의 전체 경로를 얻을 수 있으며, 그것을 대체 | DataDirectory를 | 문자열 연결한다.

    스티브의 대답의 다음에 당신은 속성 창에서 데이터베이스의 전체 경로를 얻을 수 있으며, 그것을 대체 | DataDirectory를 | 문자열 연결한다.

    코드 같은 것

    conn.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=G:\MhD\c#\phonebook\phonebook\phonebook\tellbook.mdf;Integrated Security=True";
    
  6. from https://stackoverflow.com/questions/23496393/data-not-saving-permanently-to-sql-table by cc-by-sa and MIT license