多くの場合、.NETオブジェクトのIDとしてSQLIDを使用します。
オブジェクトに負のIDを持たせたくないので、IDを0または1から開始します。
IDはユーザーに提示されるため、人間にとって論理的である必要があります。
また、((Int32)key1 << 32)+key2;のようなものをよく使用します。ハッシュの
場合署名されていない場合は、より高速な(UInt32)key1 << 32 | key2;
SQLには符号なしデータ型がないため、範囲の半分が失われます。
.NETでSQL署名付きから署名なしに変換するための良い習慣は何ですか?
変換が0から最大になる場所。
ストレートキャストは、(UInt16)Int16.Min =Int16.Max+1としては機能しません。
Int16.Minを0に、Int16.MaxをUInt16.Maxに変換する必要があります。
SQLでは、データ型のIDシードを最小(または最小+1)に設定します。
現在、Int32 maxを吹き飛ばそうとしている状況がありますが、UInt32maxを超えることはないと思われます。UInt32 maxを超えた場合は、アプリとデータベースを完全に確認する必要があります。
SqlDataReaderの拡張機能を試しましたが、機能しているようです。
回答として投稿します。
まだ本番環境に移行していないので、SOをチェックして、より良いものやアプローチに関する警告を確認してください。
このアプリはゼロを使用し、決して使用しないため、DataTableの互換性は必要ありません。
EntityFrameworkもSQLLINQも使用していません。グランジTSQLおよびSP。
public static class MyExtensions
{
public static UInt16 GetUInt16(this SqlDataReader rdr, int i)
{
//return (UInt16)rdr.GetInt16(i); // wrong answer
Int16 int16 = rdr.GetInt16(i);
UInt16 uint16 = (UInt16)(int16 + 32768);
return uint16;
}
public static UInt32 GetUInt32(this SqlDataReader rdr, int i)
{
Int32 int32 = rdr.GetInt32(i);
UInt32 uint32 = (UInt32)(int32 + 2147483648);
return uint32;
}
}