Mac OSX에서 iPhone 및 Monitech 용 MonoTouch .NET으로 작업. 데이터베이스에서 아무 문제없이 읽을 수 있습니다. 그러나 데이터베이스를 변경하려고하면 이상한 동작이 발생합니다. 아래 코드는 예외없이 실행되지만 데이터베이스를 실제로 변경하지는 않습니다. 테이블을 만들고, 레코드를 삽입하고, 레코드를 선택하고, 콘솔에 표시 할 수 있습니다. 그러나 db 연결을 닫으면 모든 변경 사항이 사라집니다. 또한, conn.Close() 전에 코드에 중단 점을 넣고 데이터베이스를 검사하면 테이블이 존재하지 않습니다. 실제 SQL 문에 응답하는 상상의 데이터베이스로만 작업하고있는 것 같습니다. 기묘한.연결 후 SQLite 변경 사항이 손실됩니다 .Close()
코드 실행되지만 실제로 데이터베이스에 아무것도 기록하지 않습니다이 :
const string _connectionString = "Data Source=App_Data/MyDatabaseFile";
var conn = new SqliteConnection(_connectionString);
conn.Open();
var command = conn.CreateCommand();
command.CommandText = "CREATE TABLE Test (id integer primary key AUTOINCREMENT, text varchar(100))";
command.ExecuteNonQuery();
var cmd2 = conn.CreateCommand();
cmd2.CommandText = "INSERT INTO Test (Text) Values ('test test test')";
var rowsAffected = cmd2.ExecuteNonQuery(); //rowsAffected is 1
var cmd3 = conn.CreateCommand();
cmd3.CommandText = "SELECT * FROM Test";
var reader = cmd3.ExecuteReader();
Console.WriteLine(reader["text"]); //writes "test test test" to console, nothing in database
conn.Close();
내가 SQLite는 브라우저에서 동일한 SQL 문을 실행하면
, 그들은 잘 작동 :CREATE TABLE Test (id integer primary key AUTOINCREMENT, text varchar(100));
INSERT INTO Test (Text) Values ('test test test');
SELECT * FROM Test;
... yield = {id = 1, text = 'test test test'}
아마 말할 수 있지만, 트랜잭션을 사용하지 않는다고 언급 할 가치가 있습니다.
UPDATE :
재미있는 ... 그 'Test2를'(존재하지 않는 테이블)에서 볼 수있는 SELECT 쿼리를 실행하고 그것이 SQLiteException가 발생하지 않습니다 위에 내가 코드를 변경할 수 있습니다 "이러한 테이블을 : Test2를" .
나는 SQLite가 트랜잭션을 필요로하는 off 기회에 트랜잭션에서 위의 코드를 래핑하려고했습니다 ... 주사위가 필요 없습니다.
업데이트 # 2 :
아담은 새 연결을 열고 응용 프로그램을 중지하기 전에 다시 새 테이블에서 선택하려고 제안했다. 나는 위의 코드 뒤에 다음 코드를 추가 :
var conn2 = new SqliteConnection(_connectionString);
conn2.Open();
var cmd4 = conn2.CreateCommand();
cmd4.CommandText = "SELECT * FROM Test";
var reader2 = cmd4.ExecuteReader();
Console.WriteLine("2nd attempt: " + reader2["text"]); //outputs correctly
conn.Close();
좋아,의 Connection.close()가 잘못 후 변경 사항을 잃는에 대한 나의 가정. 새로 삽입 된 행을 찾아서 콘솔에 출력했습니다. 그러나 응용 프로그램을 중지하면 테이블과 행이 여전히 사라집니다.
이 장치 에뮬레이터 안에 있습니까? 데이터베이스를 보는 대신 코드 명령을 작성하여 방금 삽입 한 것을 선택할 수 있습니까? –
예. monoDevelop와 iPhone 시뮬레이터를 사용하고 있습니다. 나는 데이터베이스를보고 있었지만 위의 코드는 삽입 된 것을 선택하려고 시도했다. –
그래서 그것은 ... 그것을 발견하지 못했습니다. –