我需要從一個SQL服務器獲取一個位到C#。我嘗試了不同的解決方案,如:從SqlServer獲取一點到C#
bool active = rdr.GetSqlBinary(5);
Int16 active = rdr.GetSqlBinary(5);
但找不到任何方式獲取該位。 有人可以舉個例子嗎?
我需要從一個SQL服務器獲取一個位到C#。我嘗試了不同的解決方案,如:從SqlServer獲取一點到C#
bool active = rdr.GetSqlBinary(5);
Int16 active = rdr.GetSqlBinary(5);
但找不到任何方式獲取該位。 有人可以舉個例子嗎?
如果你確信列值永遠不會NULL
那麼下面會做的伎倆:
bool active = rdr.GetBoolean(rdr.GetOrdinal("Active"));
如果這是可能的NULL
值可能會被返回:
int oActive = rdr.GetOrdinal("Active");
bool? active = rdr.IsDBNull(oActive) ? (bool?)null : rdr.GetBoolean(oActive);
使用GetFieldType確定要使用的數據類型。
我得出了以下的解決方案使用:
bool active = (bool)rdr.GetSqlBoolean(rdr.GetOrdinal("Active"));
你不應該需要使用GetOrdinal,GetSqlBoolean應該是足夠的。他們都有相同的返回類型... – James 2009-08-26 14:49:58
你不能在StackOverflow上註冊,直到你有15 ...?聲望點,你通過自己上升獲得獎勵,選擇答案和徽章。不過,我認爲你應該能夠將特定的答案標記爲選定的答案。 – 2009-08-26 15:08:36
'SqlBoolean'實際上只是一個包含布爾值的包裝函數,以允許爲空等。所以,如果你要調用'GetSqlBoolean',然後立即將結果轉換爲'bool',你可能只需調用'rdr.GetBoolean'首先。 – LukeH 2009-08-26 15:34:34
有一個SqlBoolean結構的公共get方法:IsTrue。所以,你可以使用這種方式,以確保結果是布爾值:
bool active = rdr.GetSqlBoolean(5).IsTrue;
在一個側面說明,你可以讓你的代碼更可讀/維護使用GetOrdinal(),例如:rdr.GetSqlBoolean(RDR .GetOrdinal(「MyBitColumn」)) – grenade 2009-08-26 14:30:39
我也試過: bool active = rdr.GetSqlBoolean(12); 我得到的結果:不能將SqlBoolean轉換爲布爾 – Jorn 2009-08-26 14:40:35
嗨,你錯過了一個演員,請看下面我的答案。 – James 2009-08-26 14:45:11