SQL Server float, real과 C# double 매핑 연동
C#에서 GPS 좌표인 위도 경도나 각종 소수점 처리할 땐 double 자료형을 사용합니다. 정밀도가 높아야 하는 데이터를 DB에 넣을 땐 SQL Server의 float나 real과 매칭하여 사용합니다.
다만, SQL 서버의 float(53)는 일반 프로그래밍 개발 언어의 float와 의미가 같습니다. real은 float(53)이 아니라 float(24)로 같지 않고요.
- decimal 소수 (x, y)는 SQL Server에서 부동 소수가 아닌 자릿수가 고정된 소수를 다룰 때 사용합니다. C#에서 제공하는 decimal 자료형과 전혀 다르며 128 비트 부동 소수점(128 bit floating point number) 형태와 유사합니다.
- MSSQL의 float는 닷넷 프레임워크 64비트의 double과 똑같지 않으나 유사합니다. 하지만 C# float는 32비트이므로 float / float (53) 보다 real / float (24) 형식과 매칭하여 사용합니다.
[데이터 타입 data type 연동과 numeric]
그래서 msdn에서 제공하는 SqlDbType Enum을 참조하여 프로그래밍 설계를 해야 합니다.
CLR datatype <-> SQL Server 자료형 매핑 표
BigInt |
0 |
Int64. 64비트 부호 있는 정수입니다. |
Binary |
1 |
Array 형식의 Byte입니다. 범위가 1바이트에서 8,000바이트까지인 이진 데이터의 고정 길이 스트림입니다. |
Bit |
2 |
Boolean. 0, 1 또는 null일 수 있는 부호 없는 숫자 값입니다. |
Char |
3 |
String. 범위가 1자에서 8,000자까지이고 유니코드가 아닌 문자의 고정 길이 스트림입니다. |
Date |
31 |
값 범위가 서기 1년 1월 1일에서 서기 9999년 12월 31일 사이인 날짜 데이터입니다. |
DateTime |
4 |
DateTime. 3.33밀리초의 정확성으로 값의 범위가 1753년 1월 1일에서 9999년 12월 31일까지인 날짜 및 시간 데이터입니다. |
DateTime2 |
33 |
날짜 및 시간 데이터입니다. 날짜 값 범위는 서기 1년 1월 1일에서 서기 9999년 12월 31일 사이입니다. Time 값 범위는 00:00:00부터 23:59:59.9999999까지이며 정확도는 100나노초입니다. |
DateTimeOffset |
34 |
표준 시간대를 고려한 날짜 및 시간 데이터입니다. 날짜 값 범위는 서기 1년 1월 1일에서 서기 9999년 12월 31일 사이입니다. Time 값 범위는 00:00:00부터 23:59:59.9999999까지이며 정확도는 100나노초입니다. 표준 시간대 값의 범위는 -14:00에서 +14:00 사이입니다. |
Decimal |
5 |
Decimal. -10 38 -1과 10 38 -1 사이의 고정 전체 자릿수 및 소수 자릿수 값입니다. |
Float |
6 |
Double. 범위가 -1.79E +308에서 1.79E +308까지인 부동 소수점 숫자입니다. |
Image |
7 |
Array 형식의 Byte입니다. 범위가 0바이트에서 2 31 -1(또는 2,147,483,647)바이트까지인 이진 데이터의 가변 길이 스트림입니다. |
Int |
8 |
Int32. 32비트 부호 있는 정수입니다. |
Money |
9 |
Decimal. 정확성이 통화 단위의 10000분의 1이고 범위가 -2 63(또는 -9,223,372,036,854,775,808)에서 2 63 -1(또는 +9,223,372,036,854,775,807)까지인 통화 값입니다. |
NChar |
10 |
String. 범위가 1자에서 4,000자까지인 유니코드 문자의 고정 길이 스트림입니다. |
NText |
11 |
String. 최대 길이가 2 30 - 1(또는 1,073,741,823)자인 유니코드 데이터의 가변 길이 스트림입니다. |
NVarChar |
12 |
String. 범위가 1자에서 4,000자까지인 유니코드 문자의 가변 길이 스트림입니다. 문자열이 4,000자보다 더 큰 경우 암시적 변환이 실패합니다. 4,000자보다 더 긴 문자열로 작업할 경우 개체를 명시적으로 설정합니다. 데이터 열이 nvarchar(max)일 경우 NVarChar를 사용합니다. |
Real |
13 |
Single. 범위가 -3.40E +38에서 3.40E +38까지인 부동 소수점 숫자입니다. |
SmallDateTime |
15 |
DateTime. 1분의 정확성으로 값의 범위가 1900년 1월 1일에서 2079년 6월 6일까지인 날짜 및 시간 데이터입니다. |
SmallInt |
16 |
Int16. 16비트 부호 있는 정수입니다. |
SmallMoney |
17 |
Decimal. 통화 단위의 10000분의 1 정확성으로 범위가 -214,748.3648에서 +214,748.3647까지인 통화 값입니다. |
Structured |
30 |
테이블 반환 매개 변수에 들어 있는 구조적 데이터를 지정하기 위한 특수 데이터 형식입니다. |
Text |
18 |
String. 최대 길이가 2 31 -1(또는 2,147,483,647)자이고 유니코드가 아닌 데이터의 가변 길이 스트림입니다. |
Time |
32 |
24시간제 시간 데이터입니다. Time 값 범위는 00:00:00부터 23:59:59.9999999까지이며 정확도는 100나노초입니다. SQL Server time 값에 해당합니다. |
Timestamp |
19 |
Array 형식의 Byte입니다. 데이터베이스 내에서 고유한 자동 생성되는 이진 숫자입니다. timestamp는 일반적으로 버전이 표시되는 테이블 행에 대한 메커니즘으로 사용됩니다. 저장소 크기는 8바이트입니다. |
TinyInt |
20 |
Byte. 8비트 부호 없는 정수입니다. |
Udt |
29 |
SQL Server UDT(사용자 정의 형식)입니다. |
UniqueIdentifier |
14 |
Guid. GUID(Globally Unique IDentifier)입니다. |
VarBinary |
21 |
Array 형식의 Byte입니다. 범위가 1바이트에서 8,000바이트까지인 이진 데이터의 가변 길이 스트림입니다. 바이트 배열이 8.000바이트보다 더 큰 경우 암시적 변환이 실패합니다. 8.000바이트보다 더 큰 바이트 배열로 작업할 경우 개체를 명시적으로 설정합니다. |
VarChar |
22 |
String. 범위가 1문자에서 8,000문자까지인 비유니코드 문자의 가변 길이 스트림입니다. 데이터 열이 varchar(max)일 경우 VarChar를 사용합니다. |
Variant |
23 |
Object. SQL Server 값 Empty 및 Null뿐만 아니라 숫자, 문자열, 이진 데이터 또는 날짜 데이터를 포함할 수 있는 특수 데이터 형식으로 다른 데이터 형식이 선언되지 않으면 이 형식이 사용됩니다. |
C# mssql double 자료형 연동 그림 차트는 아래와 같습니다.
CLR datatype <-> SQL Server 매핑 차트
[데이터 타입 data type 연동과 numeric]
따라서 이런 기초 정보를 기반으로 아래와 같은 「자료형 매핑 소스」를 구성할 수 있습니다.
닷넷 numeric 예제 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | switch (columnDataTypeList[i]) { case "System.String": columnDataTypeList[i] = "VARCHAR(MAX)"; break; case "System.Int32": columnDataTypeList[i] = "INT"; break; case "System.DateTime": columnDataTypeList[i] = "DATE"; break; case "System.Double": columnDataTypeList[i] = "FLOAT"; break; } | cs |
SQL Server float, real과 C# double 매핑 연동
댓글