MySql OleDb 를 사용하여 데이터 베이스에 데이터를 넣는 간단한 프로그램을 작성하였다.

using System;
using System.Data;
using System.Data.OleDb;
public class App
{
public static void Main()
{
string conStr = "Provider=MySQLProv;Data Source=csharp;" +
     "Location=localhost;User Id=root;Password=apmsetup";
string insert = "Insert into Address values(1,'김병수','서울')";
OleDbConnection conn = new OleDbConnection(conStr);
conn.Open();
OleDbCommand insertComm = new OleDbCommand(insert,conn);
insertComm.ExecuteNonQuery();
conn.Close();
}
}



위와 같은 프로그램을 작성 하고, 컴파일을 하였다. 아무 에러 없이 컴파일이 되었고 실행을 시켜 보니 다음과 같은 에러가 발생 했다.

처리되지 않은 예외: System.Data.OleDb.OleDbException: 오류 메시지 없이 'MySQLPro
v'이(가) 실패했습니다(결과 코드: E_FAIL(0x80004005)).
  위치: System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBP
ARAMS dbParams, Object& executeResult)
  위치: System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult
)
  위치: System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,
Object& executeResult)
  위치: System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior be
havior, String method)
  위치: System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
  위치: App.Main()



일단 에러가 처리 되어서 무슨 에러인지 위의 메세지를 봤을때 잘몰르겠다. ^^;; 심각히 고민해 보다가 쿼리문에 잘못이 있나 하여서 한번 쿼리 문을 직접 sql문에다 실행을 시켜 보았는데 이게 왠걸 입력이 잘된다....

그렇다면 무슨 문제가 있는것이라는 얘기인데 이리 저리 궁리해 보다가 문제점을 찾았다. 소스를 아래와 같이 수정 하였다.

using System;
using System.Data;
using System.Data.OleDb;
public class App
{
public static void Main()
{
 string conStr = "Provider=MySQLProv;Data Source=csharp;" +
     "Location=localhost;User Id=root;Password=apmsetup";
 string insert = "Insert into Address values(1,'KimByoungSoo','Seoul')";
 OleDbConnection conn = new OleDbConnection(conStr);
 conn.Open();
 OleDbCommand insertComm = new OleDbCommand(insert,conn);
 insertComm.ExecuteNonQuery();
 conn.Close();
}
}



위와 같이 입력을 하고 실행을 시켜 보니 아무런 예외 처리가 나오지 않았고 sql을 검색 해보니 잘 들어가 있었다.

mysql> select * from address;
+------+--------------+--------+
| id      | name              | addr   |
+------+--------------+--------+
|    1    | 김삿갓             | 서울시 |
| NULL | NULL              | NULL   |
| NULL | NULL              | NULL   |
| NULL | NULL              | NULL   |
|    1    | 1                    | 1      |
| NULL | NULL              | NULL   |
|    1    | KimByoungSoo | Seoul  |
|    1    | KimByoungSoo | Seoul  |
+------+--------------+--------+
8 rows in set (0.00 sec)



그렇다면 문제점은 한글전송시 문제가 발생한다는 것이다. 음.. 이것을 해결할 방법은..... 찾아 봐야 겠다.

리눅스의 한글 입력기는 SCIM을 채택하였다.
이 입력기는 한글 변환시 Ctrl + Space 버튼을 기본 설정으로 하여 리눅스 사용자가 혼란을 가진다.

그리고 한/영 키가 바로 변환하지 않아서 상당히 불편하다.
이방법을 해결해 보기로 하자.

일단 루트로 접속한후

setkeycodes 명령을 통해 한영 키와 한자 키를 등록한다. 우리나라에서 일반적으로 사용되는 106키의
경우 한자 키와 한영 키에 사용되는 스캔 코드는 각각 71,72로 이키를 122,123으로 등록한다.
노트북과 같이 자판 배열이 일반과 다를 경우에는 스캔 코드가 다르므로 모델에 맞는 값을 입력 해야 한다.

setkeycodes 71 122
setkeycodes 72 123

showkey로 등록이 제대로 됐는지 확인해 보자
한자 , 한/영키를 확인해 보자~~

이제 부팅이 다시 될 시에도 적용하기 위해

/etc/rc.d/rc.local 에 위에 두코드를 입력하고

X 윈도우로 들어 간다.

그 다음 X윈도우에서 키값을 받는 프로그램인
xev를 실행 시켜 한자, 한/영 키코드를 찾고

vi /etc/X11/Xmodmap 에
다음과 같이 이름을 등록하자

keycode 209 = Hangul_Hanja
keycode 210 = Hangul

위와 같이 추가 하고

xmodmap /etc/X11/Xmodmap
다음과 같이 입력하여 재시작 하자

그런다음 SCIM설정에서 키코드 찾기를 누르고 한/영 키를 누르면 키가 등록되어 이제부터는
한글키로 한/영 변환이 가능하게 된다~~

리눅스의 텍스트 콘솔 화면에서는 한글이 깨진 상태로 출력 된다.
그래서 무엇을 볼려고 하면 ㅁㅁㅁ 이렇게 나와서 안보는 것만 못하게 된다.
그럼 차라리 영어로 바꾸면 간단히나마 알수 있을 것이 아닌가

해결책

콘솔 모드 영어로
export LANG=en_US

콘솔 모드 한글로
export LANG=ko_KR.UTF_8

위와 같은 방법으로 하면 해결 할수 있으나 하나하나 하기는 힘들다
그렇다면 MS-Dos에서 자동으로 실행되는 환경 설정 파일 autoexec.bat과 config.sys처럼
리눅스에서도 자동 실행 되는 파일을 설정으로 간단히 할수 있다.

vi /root/.bashrs

와 같이 하고 alias를 설정한다.

alias en='export LANG=en_US'
alias en='export LANG=ko_KR.UTF-8'

이렇게 하면

div>