본문 바로가기
프로그래밍

[C#] SQLite 에서 쿼리문에 파라미터 설정하기

SQLite에서 데이터를 삽입할 때 다음과 같은 코드를 사용한다.

string sql = "INSERT INTO members (name, age) values ('홍길동', 28)";

SQLiteCommand command = new SQLiteCommand(sql, conn);

command.ExecuteNonQuery();

 

 

하지만 마냥 '홍길동 28세'만 넣을게 아니기 때문에 동적으로 쿼리문을 만들어 주기위한 

제일 간단한 방법은 다음과 같다.

string sql = "INSERT INTO members (name, age) 
			values ('" + member.name + "', " + member.age + ")";

SQLiteCommand command = new SQLiteCommand(sql, conn);

command.ExecuteNonQuery();

해당 함수의 매개변수로 받아온 객체의 필드를 쿼리문 문자열 사이에 껴넣는 것.

혹은

 

string sql = $"INSERT INTO members (name, age) 
			values ('{member.name}', '{member.age}')";

SQLiteCommand command = new SQLiteCommand(sql, conn);

command.ExecuteNonQuery();

보간문자열을 사용해도 좋다.

 

하지만 고작 2개의 데이터를 넣는데도 가독성 및 코딩하는데 어렵다. 

 

 


 

MySQL에서는 preparedStatement를 사용하면 되지만 SQLite에서는 무엇을 써야할까?

 

정답은 SQLiteParameter다

 

string sql = "INSERT INTO members (name, age) values (@param1, @param2)";

SQLiteCommand command = new SQLiteCommand(sql, conn);

command.Parameters.Add(new SQLiteParameter("@param1", member.name));
command.Parameters.Add(new SQLiteParameter("@param2", member.age));

command.ExecuteNonQuery();

 

위와 같이  쿼리문 문자열에는 @param 만 적어주고 ( @뒤에 이름은 개발자 마음대로 짓는다 ) 

 

SQLiteCommand 객체의 SQLiteParameterCollection에 SQLiteParameter 객체를 추가해준다.

 

좀 길다 싶으면

 

string sql = "INSERT INTO members (name, age) values (@param1, @param2)";

SQLiteCommand command = new SQLiteCommand(sql, conn);

command.Parameter.AddWithValue("@param1", member.name);
command.Parameter.AddWithValue("@param2", member.age);

command.ExecuteNonQuery();

AddWithValue 를 사용해주면 된다. 

 

참고로 AddWithValue는 지원하는 타입이 몇가지 안되는 것 같다.

 

 

그리고 AddRange() 함수로 SQLiteParameter의 배열을 넘겨줄 수도 있다.

 

 


 

사실 더 간단한 방법이 더 있을 것 같은데 못찾았다.

 

그리고 신경 써야할 사항도 몇가지 있지만 생략했다.

 

SQLiteCommand.CommandType 이라던지, DbType 이라던지...

 

하지만 앵간한 문자열을 넣기엔 위의 방법만으로도 충분하다.

 

 

'프로그래밍' 카테고리의 다른 글

[C#] Snippet(코드조각) 사용하기  (0) 2020.04.28