본문 바로가기

개발/Database8

MySQL에서 Rollback이 적용되지 않는 케이스에 대해 경위 수년전에 만들어진 사내용 DB가 존재하는데 이번에 DB를 사용하는 새로운 서브 시스템을 개발하게 되었습니다. 해당 DB는 기존에 있는 사내 시스템을 위해 구축된 녀석으로 이녀석에게 내가 할 수 있는건 SELECT/INSERT/UPDATE밖에 없습니다.(=DB설정을 바꿀 수 는 없는 상황) 서브 시스템은 데이터 연계용으로서 당연히(?) 트랜잭션 처리로 커밋과 롤백을 제어하고 싶습니다. 근데 아래와 같은 에러 메세지가 표시 되면서 MySQL에서 롤백 처리가 안되는 겁니다…; 1196 Some non-transactional changed tables couldn't be rolled back 원인 내가 보고 있는 테이블은 트랜잭션이 적용되지 않는 MyISAM 테이블이었기 때문에 롤백 처리를 지원하지 않.. 2019. 1. 28.
SQL Server : 데이터의 암호화와 복호화 SQL Server에서 데이터의 암호화와 복호화에 대해서 검증한 내용을 정리해 보았습니다. 0. 전제조건 대상의 SQL Server은 최신 버젼은 아님. 당시 기준 10여년 이상 된 낡은 버젼의 SQL Server 였음. DB단위의 인증이라거나 키는 가급적 사용하지 않고 어플 단위로 암호화와 복호화를 하고 싶음. 개발엔 Entity Framework를 사용예정. 하지만 SQL 직접 실행도 OK. 암호화 대상은 영어, 일본어를 기본으로 어느 나라 언어가 올지는 아무도 모름. DB기반이 아닌 암호화와 복호화도 조사해 보았으나 일본어의 한자 내용에 따라서 복호화시에 문자가 깨지는 상황이 자주 발생했기 때문에 DB에서 지원하는 암호화/복호화 기능을 사용하기로 함. 1. 검증용 DB작성(localDB) 2. 검증.. 2019. 1. 28.
EntityFramework : ConnectionStrings내의 특수문자 처리 아래와 같은 방법으로 EntityFramework를 이용해서 MySQL 접속을 하고 있는 것을 전제로 합니다. Entity Framework에서 MySQL 접속하기 패스워드에 특수문자가 들어있는 경우의 ConnectionString 기입 방법 수정전 : 기존의 connectionStrings PW:abcefg 수정후 : 상기에서 보안 강화차원으로 특수문자를 넣은 패스워드로 변경 PW:abc123efg; connectionStrings를 변경 후 실행해 보았습니다 ⇒ BUT 에러… 에러 발생 부분 using (var db = new WpEntities()) { // 쿼리 실행 ★여기서 에러 발생! } using (var db = new WpEntities())의 선언은 컴파일상의 문제는 없지만 쿼리를 실행.. 2019. 1. 28.
Entity Framework에서 MySQL 접속하기 -2 Entity Framework에서 MySQL 접속하기 의 보충적인 내용입니다. 신규 프로젝트 작성 ~ DB 모델의 추가까지의 이미지 ※ DB는 WordPress의 테이블들이 있는 MySQL DB입니다. 1. Install-Package EntityFramework 2. Install-Package MySql.Data 3. Install-Package MySql.Data.Entity 4. Install-Package MySql.Web 5. Edit Web.config 6. Clean & Build 7. Make ADO.NET Entity Data Model 그외의 예외상황 해결방법 1. 날짜 변환시에 에러가 발생할 경우 MySQL에서 System.DateTime의 값을 취득할 경우에 하기의 에러가 발생하는.. 2019. 1. 23.
Entity Framework에서 MySQL 접속하기 0. Install-Package EntityFramework Entity Framework가 인스톨 되어 있지 않았을 경우엔 EntityFramework 6.0 을 설치합니다. 1. MySQL for Visual Studio를 설치 「mysql-for-visualstudio-2.0.5.msi」 Download MySQL for Visual Studio https://dev.mysql.com/downloads/windows/visualstudio/2.0.html 2. MySQL connector를 설치 「mysql-connector-net-6.9.11.msi」 다운로드 미러 http://mirror.cogentco.com/pub/mysql/MySQLInstaller/ 3. NuGet 패키지 관리에서 My.. 2019. 1. 23.
Entity Framework에서 제일 최근에 갱신된 레코드를 추출하기 Entity Framework에서 제일 최근에 갱신된 레코드를 추출하는 방법을 정리해 보았습니다. DB샘플 tb1 Id DetailId LastUpdatedAt 1 101 2017-02-01 01:00:00 2 102 2017-02-01 10:00:00 3 103 2017-02-02 01:00:00 4 104 2017-02-01 01:00:00 5 105 2017-02-02 01:00:00 tb2 DetailId Name 101 Name1 102 Name2 예시1. tb1에서 같은 DetailId를 가진 복수의 레코드 중에서 제일 최근에 갱신된 레코드를 추출 var list = (from t in db.tb1 group t by t.DetailId into g select g.OrderByDescendi.. 2019. 1. 23.
Entity Framework에서 SQL문을 직접 실행해서 결과 취득하기 SQL쿼리를 그대로 Entity Framework에서 실행하고 싶을 경우의 사용법입니다. SELECT var testList = new List(); var test = DbContext.Database.SqlQuery("SELECT item_id, details FROM item WHERE item_type = 1;"); if (test != null) { testList = test.ToList(); } INSERT/UPDATE int updateResultCount = DbContext.Database.ExecuteSqlCommand("UPDATE item SET item_type = '2' WHERE item_id = 11;"); SQL -> IQueryable string sql = "SELEC.. 2019. 1. 23.
Entity Framework에서 tinyint(1)를 sbyte로 인식 시키고 싶을 경우의 해결 방법 1. config 파일을 수정 Web.config 또는 App.config의 에 “TreatTinyAsBoolean=false”를 추가합니다. 2. DB의 edmx 파일을 수정 SSDL content 부분의 bool를 tinyint로 수정합니다. 그리고 CSDL content 부분의 Boolean을 SByte로 수정합니다. 현재(2016.12) Web.config의 설정만으로 edmx가 자동으로 대응해 주는 방법은 없어서 exmd 파일에서 해당 컬럼과 모델 항목 설정을 일일이 수정해 줄 필요가 있습니다. 그리고 edmx에 변경이 발생할 때마다 (테이블의 추가/변경/삭제 등) 기존의 수동 설정은 새로 리셋되기 때문에 갱신 할때마다 설정을 수정하지 않으면 안됩니다. 처음부터 새로 DB를 구축할때 Entity.. 2019. 1. 21.