Access DB 의 truncate, limit
마스터욱
0
46
0
0
2017-02-08 16:29:50
Mysql 과는 다르게 Access DB에는
truncate, limit 가 없다.
limit 같은 경우에는 아래와 같이
SELECT TOP 1 * FROM stock_sign ORDER BY idx desc
TOP 1 이렇게 1개만 뽑을수 있는것으로 확인했다. (역시 굴링이 형은 위대해~, 네이년 같은곳에는 검색해도 안나옴)
truncate 같은 경우에는 약간의 꼼수를 사용해야 한다
1. delete 로 전체 다 지운다.
2. 강제로 1row를 insert 한다. 이때 insert 를 할때 auto_increment 컬럼에 강제로 '0'을 넣는다.
3. 다시 delete 한다.
대충 아래와 같이 하면 된다.
connCmd.CommandText = "delete from stock_sign";
connCmd.ExecuteNonQuery();
connCmd.CommandText = "INSERT INTO stock_sign(idx) VALUES(0)";
connCmd.ExecuteNonQuery();
connCmd.CommandText = "delete from stock_sign";
connCmd.ExecuteNonQuery();
즉 delete 로 모두 비우고, 강제로 auto_increment 컬럼에 '0'을 넣음으로써 auto_increment 를 초기화 시키는 거다. 이것도 굴링이 형이 도와준거다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | //하루가 지난 체결정보들 모두 삭제 Dictionary<int, string> columns = new Dictionary<int, string>(); columns[0] = "sign_Ymd"; Dictionary<int, Dictionary<string, string>> list = database_select("SELECT TOP 1 * FROM stock_sign ORDER BY idx desc", columns); //MessageBox.Show(list[0]["sign_Ymd"]); if(list[0]["sign_Ymd"] != DateTime.Now.ToString("yyyy") + DateTime.Now.ToString("MM") + DateTime.Now.ToString("dd")) { //MessageBox.Show("하루가 지났넹"); OleDbConnection conn = new OleDbConnection(); OleDbCommand connCmd = new OleDbCommand(); try { conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + accFileName + ";Mode=ReadWrite;Jet OLEDB:Database Password=" + dbPasswd; conn.Open(); connCmd.Connection = conn; connCmd.CommandText = "delete from stock_sign"; connCmd.ExecuteNonQuery(); connCmd.CommandText = "INSERT INTO stock_sign(idx) VALUES(0)"; connCmd.ExecuteNonQuery(); connCmd.CommandText = "delete from stock_sign"; connCmd.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine("Exception 에러발생 : " + ex.Message); } finally { conn.Close(); } } | cs |