---
# System prepended metadata

title: C# 筆記

---

# C# 筆記
## datetime 值域的差異 - .NET C# 與 SQL Server
- .NET C#
    1. System.Data.SqlTypes.SqlDateTime
        - MinValue.Value：1753-01-01 00:00:00.000
        - MaxValue.Value：9999-12-31 23:59:59.997（注意 997）
    1. System.DateTime
        - MinValue：0001-01-01 00:00:00.0000000
        - MaxValue：9999-12-31 23:59:59.9999999
- SQL Server
    1. smalldatetime
        - 最小值：1753-01-01 00:00:00.000
        - 最大值：2079-06-06 23:59:00
            - 註: SQL Server 提示為 2079-06-06 23:59:***59***，其提示是錯誤的。
    1. datetime
        - 最小值：1753-01-01 00:00:00.000
        - 最大值：9999-12-31 23:59:59.997（注意 997）
    1. datetime2
        - 最小值：0001-01-01 00:00:00.0000000
        - 最大值：9999-12-31 23:59:59.9999999


> 參考資料:
> 1. [SQL Server 2005、2008 的 datetime 值范围](http://www.cftea.com/c/2014/07/6247.asp)

## C# Guid
Guid.NewGuid().ToString("N") 結果為:
7ef42579d7214d9e91c44feccd3e576b

Guid.NewGuid().ToString("D") 結果為:
ddfa0936-1a19-4b64-a0ca-6860b78f260e

Guid.NewGuid().ToString("B") 結果為:
{48c908ec-89f0-4d14-a3ee-c210d44d87a3}

Guid.NewGuid().ToString("P") 結果為: 
(56de0184-2ced-42a7-ae1e-2c04ddd8159f)

string s = Guid.NewGuid().ToString("N");
byte[] bt = System.Text.UnicodeEncoding.Unicode.GetBytes(s);//產生64 byte
string c = System.Text.UnicodeEncoding.Unicode.GetString(bt);
byte[] be = Guid.NewGuid().ToByteArray();//產生 16 byte



若只要數字就這樣作:
view plainprint?
Guid myGuid = Guid.NewGuid(); 
byte[] bArr = myGuid.ToByteArray(); 
int autonum = Math.Abs(BitConverter.ToInt32(bArr,0)); 


若只要數字的話, 不利用 Guid 使用 Random 更快, 可以這麼做:
string.Format("{0:00000}", (new Random()).Next(100000))
產生5位數字亂數, 左側不滿位數補0的字串產生方式!!

> 參考資料:
> 1. [C# GUID產生亂數字串 record](https://createps.pixnet.net/blog/post/32803311)