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 |
---|