\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{embuhrow} \pdfinfo{ /Title (c-sql-data-types-and-conversion.pdf) /Creator (Cheatography) /Author (embuhrow) /Subject (C\#/SQL Data Types \& Conversion Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{4BA32A} \definecolor{LightBackground}{HTML}{F3F9F1} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{C\#/SQL Data Types \& Conversion Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{embuhrow} via \textcolor{DarkBackground}{\uline{cheatography.com/22179/cs/6420/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}embuhrow \\ \uline{cheatography.com/embuhrow} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 13th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{x{1.008 cm} x{2.16 cm} x{2.088 cm} x{1.944 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{SQL Data Types (Numeric - Exact)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Minimum & Maximum & Storage \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \seqsplit{bigint} & -9,223,372,036,854,775,808 & 9,223,372,036,854,775,807 & 8 Bytes \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} int & -2,147,483,648 & 2,147,483,647 & 4 Bytes \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} \seqsplit{smallint} & -32,768 & 32,767 & 2 Bytes \tn % Row Count 8 (+ 2) % Row 4 \SetRowColor{LightBackground} \seqsplit{tinyint} & 0 & 255 & 1 Byte \tn % Row Count 10 (+ 2) % Row 5 \SetRowColor{white} bit & true (1) & false (0) & 1 Byte for every 8 bits \tn % Row Count 13 (+ 3) % Row 6 \SetRowColor{LightBackground} \seqsplit{decimal(p},s) & -10\textasciicircum{}38 + 1 & 10\textasciicircum{}38 - 1 & Up to 17 Bytes \tn % Row Count 16 (+ 3) % Row 7 \SetRowColor{white} \seqsplit{numeric} & -10\textasciicircum{}38 + 1 & 10\textasciicircum{}38 - 1 & Up to 17 Bytes \tn % Row Count 18 (+ 2) % Row 8 \SetRowColor{LightBackground} money & -922,337,203,685,477.5808 & 922,337,203,685,477.5807 & 8 Bytes \tn % Row Count 21 (+ 3) % Row 9 \SetRowColor{white} \seqsplit{smallmoney} & -214,748.3648 & 214,748.3647 & 4 Bytes \tn % Row Count 23 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}----} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.52 cm} x{2.356 cm} x{3.724 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{SQL Data Types (Character Strings)}} \tn % Row 0 \SetRowColor{LightBackground} Type & \seqsplit{Range/Category} & Storage \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} char(n) & Non-Unicode Characters & n Bytes \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{varchar(n)} & Non-Unicode Characters & n Bytes \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} \seqsplit{varchar(max)} & Non-Unicode Characters & 2\textasciicircum{}31-1 Bytes \tn % Row Count 8 (+ 2) % Row 4 \SetRowColor{LightBackground} text & Non-Unicode Characters & 2\textasciicircum{}31-1 Bytes \tn % Row Count 10 (+ 2) % Row 5 \SetRowColor{white} \seqsplit{nchar(n)} & Unicode Characters & n Bytes \tn % Row Count 12 (+ 2) % Row 6 \SetRowColor{LightBackground} \seqsplit{nvarchar(n)} & Unicode Characters & n Bytes \tn % Row Count 14 (+ 2) % Row 7 \SetRowColor{white} \seqsplit{nvarchar(max)} & Unicode Characters & 2\textasciicircum{}31-1 Bytes \tn % Row Count 16 (+ 2) % Row 8 \SetRowColor{LightBackground} ntext & Unicode Characters & 2\textasciicircum{}30-1 Bytes \tn % Row Count 18 (+ 2) % Row 9 \SetRowColor{white} \seqsplit{binary(n)} & Binary Data & n Bytes \tn % Row Count 20 (+ 2) % Row 10 \SetRowColor{LightBackground} \seqsplit{varbinary(n)} & Binary Data & n Bytes \tn % Row Count 22 (+ 2) % Row 11 \SetRowColor{white} \seqsplit{varbinary(max)} & Binary Data & Actual length of the data + 2 Bytes \tn % Row Count 24 (+ 2) % Row 12 \SetRowColor{LightBackground} image & Binary Data & 2\textasciicircum{}31-1 Bytes \tn % Row Count 25 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{0.988 cm} x{5.016 cm} x{1.596 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{SQL Data Types (Numeric - Approximate)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Range & Storage \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \seqsplit{float(n)} & -1.79E+308 to -2.23E-308, 0, 2.23E-308 to 1.79E+308 & 4 or 8 Bytes* \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} real & -3.40E+38 to -1.18E-38, 0, and 1.18E-38 to 3.40E+38 & 4 Bytes \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}---} \SetRowColor{LightBackground} \mymulticolumn{3}{x{8.4cm}}{* Depends on the value of "n".} \tn \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.44 cm} x{6.56 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{SQL Data Types (Spatial)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Range \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \seqsplit{geography} & Latitude \& Longitude values \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{geometry} & Euclidean (flat) coordinate system (x/y values) \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.9 cm} x{4.408 cm} x{1.292 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{SQL Data Types (Other)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Range & \seqsplit{Storage} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \seqsplit{uniqueidentifier} & Fixed-length 32-character Hexidecimal & 16 Bytes \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} xml & Well-formed XML Data & 2 \seqsplit{Gigabytes} \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.72 cm} x{2.664 cm} x{2.808 cm} x{1.008 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{C\# Data Types (Numeric)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Minimum & Maximum & .NET Class \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} byte & 0 & 255 & \seqsplit{System}.Byte \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} sbyte & -128 & 127 & \seqsplit{System}.SByte \tn % Row Count 8 (+ 3) % Row 3 \SetRowColor{white} short & -32,768 & 32,767 & \seqsplit{System}.Int16 \tn % Row Count 11 (+ 3) % Row 4 \SetRowColor{LightBackground} \seqsplit{ushort} & 0 & 65,535 & \seqsplit{System}.UInt16 \tn % Row Count 14 (+ 3) % Row 5 \SetRowColor{white} int & -2,147,483,648 & 2,147,483,647 & \seqsplit{System}.Int32 \tn % Row Count 17 (+ 3) % Row 6 \SetRowColor{LightBackground} uint & 0 & 4,294,967,295 & \seqsplit{System}.UInt32 \tn % Row Count 20 (+ 3) % Row 7 \SetRowColor{white} long & -9,223,372,036,854,775,808 & 9,223,372,036,854,775,807 & \seqsplit{System}.Int64 \tn % Row Count 23 (+ 3) % Row 8 \SetRowColor{LightBackground} ulong & 0 & 18,446,744,073,709,551,615 & \seqsplit{System}.UInt64 \tn % Row Count 26 (+ 3) % Row 9 \SetRowColor{white} float & -3.402823e38 & 3.402823e38 & \seqsplit{System}.Single \tn % Row Count 29 (+ 3) % Row 10 \SetRowColor{LightBackground} \seqsplit{double} & \seqsplit{-1.79769313486232e308} & \seqsplit{1.79769313486232e308} & \seqsplit{System}.Double \tn % Row Count 32 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{p{0.72 cm} x{2.664 cm} x{2.808 cm} x{1.008 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{C\# Data Types (Numeric) (cont)}} \tn % Row 11 \SetRowColor{LightBackground} \seqsplit{decimal} & -79,228,168,514,264,337,593,543,950,335 & 79,228,162,514,264,337,593,543,950,335 & \seqsplit{System}.Decimal \tn % Row Count 3 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}----} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.912 cm} x{4.636 cm} x{2.052 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{C\# Data Types (Character Strings)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Range & .NET Class \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} char & A single Unicode character & \seqsplit{System.Char} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{string} & A string of Unicode characters & \seqsplit{System.String} \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.72 cm} x{2.592 cm} x{2.52 cm} x{1.368 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{C\# Data Types (Date \& Time)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Minimum & Maximum & .NET Class \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \seqsplit{DateTime} & 01/01/0001 \seqsplit{00:00:00.0000000} & 12/31/9999 \seqsplit{23:59:59.9999999} & \seqsplit{System.DateTime} \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} \seqsplit{TimeSpan} & -10,675,199 days* & 10,675,199 days* & \seqsplit{System.TimeSpan} \tn % Row Count 8 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}----} \SetRowColor{LightBackground} \mymulticolumn{4}{x{8.4cm}}{* Values are approximate, based on long.MinValue and long.MaxValue for total number of ticks.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}----} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.912 cm} x{4.636 cm} x{2.052 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{C\# Data Types (Other)}} \tn % Row 0 \SetRowColor{LightBackground} Type & Range & .NET Class \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} bool & True or False & \seqsplit{System.Boolean} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{object} & An object. & \seqsplit{System.Object} \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} Guid & A 32-character Hexidecimal value & \seqsplit{System.Guid} \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.76 cm} x{4.24 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{SQL to C\# Conversion}} \tn % Row 0 \SetRowColor{LightBackground} SQL Data Type & C\# Type \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} tinyint & byte \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} smallint & short \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} int & int \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} bigint & long \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} float & float \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} decimal & decimal \tn % Row Count 7 (+ 1) % Row 7 \SetRowColor{white} nvarchar & string \tn % Row Count 8 (+ 1) % Row 8 \SetRowColor{LightBackground} varchar & string \tn % Row Count 9 (+ 1) % Row 9 \SetRowColor{white} char & string \tn % Row Count 10 (+ 1) % Row 10 \SetRowColor{LightBackground} bit & bool \tn % Row Count 11 (+ 1) % Row 11 \SetRowColor{white} datetime2 & DateTime \tn % Row Count 12 (+ 1) % Row 12 \SetRowColor{LightBackground} geography & DbGeography \tn % Row Count 13 (+ 1) % Row 13 \SetRowColor{white} uniqueidentifier & Guid \tn % Row Count 14 (+ 1) % Row 14 \SetRowColor{LightBackground} time* & DateTime/TimeSpan* \tn % Row Count 15 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{* Time is stored as a DateTime on the data object, however, there are times when it is converted into a TimeSpan in order to perform certain operations.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}