본문 바로가기
C++ 200제/코딩 IT 정보

SQL Server C# 연동 시 double 변수 값은 float real로 처리

by vicddory 2019. 2. 13.

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) 형식과 매칭하여 사용합니다.


SQL Server float, real과 C# double 매핑 연동[데이터 타입 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

 Int32. 32비트 부호 있는 정수입니다.

 Money

 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 매핑 차트


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 매핑 연동

댓글