본문 바로가기
C#, MONO

c#에서 Sqlite를 연결, 데이터 읽어 오기, 수정하기

by gigasound 2021. 8. 20.


C#에서 SQLite를 사용하기 

윈도즈에서 sqlite를 사용하려면 다음과 같이 정의하면 됩니다.

using System.Data.SQLite;

c#-mono로 리눅스에서 사용하려면 다음가 같이 nuget 패키지를 설치합니다.


데이터 베이스 연결 문장

윈도즈에서 데이터베이스 파일과 sqlite를 연결하는 문장은 다음과 같이 설정해야 합니다.

_conn_string = string.Format("Data Source={0}",_db_file);

리눅스용은 다음과 같이 설정합니다.

_conn_string = string.Format("URI=file:{0}",_db_file);

데이터 불러오기

윈도즈에서 데이터베이스에 기록된 ID에 해당하는 이름을 가져오는 내용입니다. 이 함수는 ref로 결과를 받습니다. 그리고 데이터 베이스 읽기가 잘되었는지를 반환합니다.

sqlite를 사용해서 데이터를 읽을 때 reader를 사용하는데 반드시 reader.Close()를 해야 문제가 발생하지 않습니다.  

public bool Read_Value(int ID,ref string name) {
  bool retb = false;
  string query =  string.Format("SELECT name FROM user WHERE ID={0}",ID);
  try {
    using(var conn = new System.Data.SQLite.SQLiteConnection(_conn_string)) {
      if(conn.State == ConnectionState.Closed) {
      conn.Open();
    }
    using(var cmd = new System.Data.SQLite.SQLiteCommand(query,conn)) {
      using(var reader = cmd.ExecuteReader()) {
        reader.Read();
        name = reader["name"].ToString());
        reader.Close();
      }
    }
    retb = true;
  }
  catch {
  	Console.WriteLine("Err");
  	name ="";
  	retb = false;
  }
  return retb;
}

리눅스에서는 다음과 같이합니다.

public bool Read_Value(int ID,ref string name) {
  bool retb = false;
  string query =  string.Format("SELECT name FROM usert WHERE ID={0}",ID);
  try {
    using(var conn = new Mono.Data.SQlite.SqliteConnection(_conn_string)) {
      if(conn.State == ConnectionState.Closed) {
      conn.Open();
    }
    using(var cmd = new Mono.Data.Sqlite.SqliteCommand(query,conn)) {
      using(var reader = cmd.ExecuteReader()) {
        reader.Read();
        name = reader["name"].ToString());
        reader.Close();
      }
    }
    retb = true;
  }
  catch {
  	Console.WriteLine("Err");
  	name ="";
  	retb = false;
  }
  return retb;
}

데이터 수정하기

윈도우즈에서 데이터를 수정하는 방법은 다음과 같습니다.

public bool Save_Volume(int ID,string name) {
  bool retb = false;
  string query = string.Format("UPDATE usert SET name={0} WHERE ID={1}",name,ID);
  try {
    using(var conn = new System.Data.SQLite.SQLiteConnection(_conn_string)) {
      if(conn.State == ConnectionState.Closed) {
      conn.Open();
  		}
    	using(var cmd = new System.Data.SQLite.SQLiteCommand(query,conn)) {
    		cmd.ExecuteNonQuery();
  		}
  	}
  	retb = true;
  }
  catch {
  	Console.WriteLine("Err");
  	retb = false;
  }
  return retb;
}

리눅스에서는 다음과 같이 합니다.

public bool Save_Volume(int ID,string name) {
  bool retb = false;
  string query = string.Format("UPDATE usert SET name={0} WHERE ID={1}",name,ID);
  try {
    using(var conn = new Mono.Data.Sqlite.SqliteConnection(_conn_string)) {
      if(conn.State == ConnectionState.Closed) {
      conn.Open();
  		}
    	using(var cmd = new Mono.Data.Sqlite.SqliteCommand(query,conn)) {
    		cmd.ExecuteNonQuery();
  		}
  	}
  	retb = true;
  }
  catch {
  	Console.WriteLine("Err");
  	retb = false;
  }
  return retb;
}

광고좀 꾹 눌러주시면 고맙겠습니다. 

'C#, MONO' 카테고리의 다른 글

c#의 Enum 멤버의 정보 추출  (0) 2021.10.06
테이블 컬럼 조작  (0) 2021.08.21
데이터의 추가 및 삭제  (0) 2021.08.20
데이터베이스 파일 만들기  (0) 2021.08.20
INI 파일 다루기  (0) 2021.08.14