2012-09-15 3 views
1

저는 SQL Lite를 사용하여 혼란스럽고 배우고 있습니다.SQLite가 삽입 한 데이터를 저장하지 않습니다.

필자는 People이라고 불리는 테이블을 가지고 있는데, 데이터베이스에 연결하여 모든 정보를 보여주는 것과 같은 몇 가지 방법이 있습니다.

이제 데이터를 삽입하려고합니다.

private void ExecuteQuery(string txtQuery) 
{ 
    SetConnection(); 
    sql_con.Open(); 
    sql_cmd = sql_con.CreateCommand(); 
    sql_cmd.CommandText = txtQuery; 
    sql_cmd.ExecuteNonQuery(); 
    sql_con.Close(); 
} 

나는이 방법에있어 모든 데이터를 볼 수 : :이 방법이

private void LoadData() 
{ 
    SetConnection(); 
    sql_con.Open(); 
    sql_cmd = sql_con.CreateCommand(); 
    string CommandText = "SELECT * FROM People"; 
    DB = new SQLiteDataAdapter(CommandText, sql_con); 
    DS.Reset(); 
    DB.Fill(DS); 
    DT = DS.Tables[0]; 
    dataGridView1.DataSource = DT; 
    sql_con.Close(); 
} 

내가 일부 데이터를 인세하고 바로 afther 나는 LoadData() 전화를, 나는 모두 볼 수 있습니다 내가 바꾼 변화들.

프로그램을 닫은 후 agian을 열고 LoadData()으로 전화하면 이전에 삽입 한 새 정보가 표시되지 않습니다.

삽입 할 SQL 라이트 GUI 응용 프로그램을 사용한 일부 데이터가 있는데, LoadData() 메서드를 호출 할 때마다 그 데이터를 볼 수 있지만 광산은 아닙니다.

SQLite가 모든 데이터를 저장하는 데 다른 작업을 수행해야합니까?

편집 : 이것은 어떻게 데이터를 삽입합니까, mybee 문제는 여기에서입니까?

string insetCommand = "INSERT INTO People Values(2,'" + textBox1.Text + "')"; 

EDIT2 : 내 ConnectionString을 방법

public static string connectionString 
    { 
     get 
     { 
      string database = 
       //AppDomain.CurrentDomain.BaseDirectory + "..\\..\\Database\\ImageLib.s3db"; 
       AppDomain.CurrentDomain.BaseDirectory + "\\DataBase\\myTable2"; 
      string connectionString = 
       @"Data Source=" + Path.GetFullPath(database) + ";Version=3;"; 
      return connectionString; 
     } 
    } 
+0

언제든지 Visual Studio 프로젝트의 일부로 SQLite 데이터베이스를 가지고 있습니까? – Gigi

+0

나는 내가 어떻게 이해할 수 있을지 확신하지 못한다. – samy

+0

어딘가에 .db3 파일 (또는 이에 상응하는 파일)을 사용해야합니다. VS 솔루션에 포함되어 있습니까? 아니면 단순히 별도의 파일로로드하고 있습니까? – Gigi

답변

1

데이터가 임시 데이터베이스에 저장된 것처럼 보이는 문제가 있습니다.

connectionString이 실제로 사용되는지 확인하십시오 (파일 이름이 비어 있으면 SQLite는 임시 데이터베이스를 사용합니다).

응용 프로그램 내부에서 데이터베이스 파일 이름을 확인하려면 쿼리와 마찬가지로 PRAGMA database_list을 실행하고 결과의 세 번째 열에 파일 이름이 들어 있는지 확인하십시오. 출력 예 :

> pragma database_list; 
seq name file 
----- ------ ---------- 
0  main /tmp/test.db 
+0

내 데이터베이스 이름을 myTable2.db 및 연결 문자열로 변경하면 이제는 작동합니다. 고마워! – samy

+0

wierd, 몇 가지 테스트를했는데 여전히 작동하지 않습니다. PRAGMA database_list를 실행하는 방법은 무엇입니까? (나는 그것을 모른다). thx – samy

+0

대신'string CommandText = "SELECT * FROM People";'사용'string CommandText = "PRAGMA database_list";'. –

0

내가 SQLite는 그 필요하다고 보라, COMMIT 문을 실행하기 위해보십시오! 또한 트랜잭션으로 모든 것을 래핑하려고 할 수도 있습니다!

+0

내가 말했듯이 나는 힘줄을했지만, 나는 같은 결과를 얻는다. 프로그램이 작동 할 때 테이블의 변화를 볼 수 있습니다. 그러나 내가 그것을 닫은 다음 다시 열면 나는 transction으로 추가 한 새로운 데이터를 볼 수 없습니다. 다른 아이디어? – samy

+0

'BEGIN' /'END TRANSACTION' 명령을 사용하지 않으면, SQLite는 각 명령 후에 자동으로 커밋합니다. –

관련 문제