台灣最大程式設計社群網站
線上人數
918
 
會員總數:240886
討論主題:186654
歡迎您免費加入會員
討論區列表 >> ASP.NET >> SQL回空值問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL回空值問題
價值 : 30 QP  點閱數:397 回應數:10

樓主

小強
門外漢
0 15
242 15
發送站內信

各位前輩晚安~~又打擾各為了~~~
有一件事想請問大家~~~


我在SQL有張表~~其中某一列的某一個欄位是XXX~~~xxx在SQL是null

目前在程式中 要去撈此欄位的值回來~~~但撈回後~~想先做個判斷~~判斷如果此欄是null就怎樣~~不是null就怎樣~~

可是在程式端 寫了判斷,比如if(row[XXX]!=null)...等等的判斷~~試了好幾種寫法~~ 判斷都不會是空值~~但實際在SQL此欄位為空

後來測試
if(row[XXX]==null){response.write("null")}
else{response.write("not null")}

出現都是not null~~~

而且如果他是空~~~row[XXX].tostring應該報錯~~卻都沒報~~表示應該撈到的資料不是空值~~~怎麼會怎樣~~~~我該怎ㄇ下判斷

謝謝


搜尋相關Tags的文章: [ SQL空值 ] ,
本篇文章發表於2017-05-19 19:08
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

彩虹
檢舉此回應
因為資料庫資料欄位上的NULL,「並不是代表空值」,而是「什麼都不是」
建議你養成習慣,在insert資料時,設定預設為空值,而不是NULL

解決方式,你可以在select的時候,搭配isnull,將NULL改成'' (代表空值)
select isnull(xxx,'') as xxx from YourTable


你可以玩玩看下面的差異,看哪個指令能把NULL的值找出來
select * from YourTable where xxx=''
VS
select * from YourTable where xxx IS NULL


本篇文章回覆於2017-05-19 21:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

彩虹
檢舉此回應
歐對了,如果上面這個方式不是你想要的

你也可以使用 IsNullOrEmpty()
if(String.IsNullOrEmpty(row[XXX])){}
本篇文章回覆於2017-05-19 21:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
小喵自己會在SQL中使用ISNULL先處理

例如用到Left JOIN或者Right JOIN
無法避免資料JOIN不到的預設就會是NULL
小喵就會類似這樣


提供樓主參考

^_^
本篇文章回覆於2017-05-19 22:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

誰是誰
檢舉此回應
空值和空字串不一樣吧
本篇文章回覆於2017-05-20 22:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
小朱大大有兩篇文章
提供大家參考

Oh~my god... 資料庫中的 NULL 值和程式語言中的 null 不同,別混為一談。

[.NET][Database] 資料庫中的 NULL 值

^_^
本篇文章回覆於2017-05-21 10:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小強
檢舉此回應
原來是這樣~~~真的太感謝大家了~~有大家真好~~
本篇文章回覆於2017-05-22 00:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

彩虹
檢舉此回應
非常謝謝 #小喵 的補充

整體更清楚了~~
本篇文章回覆於2017-05-22 12:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
感恩 小朱大大 的文章

^_^
本篇文章回覆於2017-05-22 13:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

史努比
檢舉此回應
#1 的做法, 只適用於字串, 對於數字和日期時間型態, 都沒有相對應的處理,

看過太多人因為DBNULL無法妥善處理, 觀念又沒弄清楚, 最後乾脆放棄使用所有型態,

資料庫中只使用字串欄位, 不管什麼型態的資料都用字串來儲存,

建議還是先把 Null 和 DBNull 觀念弄清楚, 千萬不要把空字串當成萬用的處理方式

樓主的問題是誤以為資料庫的NULL可以對應到C#裡的null , 但其實真正是對應到C#裡的 DBNull.Value

所以判斷式應分為二段



前面先判斷是否為DBNull, 後面再判斷是否為空字串或 string null value
本篇文章回覆於2017-05-22 16:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

小魚
檢舉此回應
出現Not Null是因為對C#來說變數是存在的,而且有配置空間給它,資料庫讀出來的不能用 == null 判斷

如果是我,我習慣用DataTable處理,當然你也可以在SQL判斷,不過我不大喜歡寫那麼長的SQL,除非不得已,
你可以用
if(!DBNull.Value.Equals(dt.Rows[i]["欄位名稱"])
{
... ...
}
如果是 "" 的話跟NULL就不一樣了,可以直接用 ==
本篇文章回覆於2017-05-27 23:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.