2013-01-12 99 views
1

我一直在努力尋找解決方案,但沒有運氣。我對VB和SQL相當陌生,但這不應該太難。我已經繼承了很多代碼,並沒有太多空間來更改數據庫屬性類型或任何東西。Razor VB - 如果Request變量爲空,則傳遞一個空值

我試圖運行在刀片使用參數的UPDATE查詢,像這樣:

Dim updateCommand = "UPDATE [tblJobRating] SET [ProjectManagement] = @0, [ProjComments] = @1, [Schedule] = @2, [SchedComments] = @3 WHERE [JobRatingID] = @4" 

所有問題需要INT值的列的,但我有一個例外,我需要通過它空值(傳遞另一個數字或零不會)。實質上是用戶的「N/A」值。

我分配變量從POST請求,就像這樣:

Dim projMgmt = Request.Form('projMgmt') 
' ... 
Dim sched = Request.Form('sched') 

我有「N/A」的價值,現在發佈沒有價值(或者也可以是一個字符串,我可以檢查ISNUMBER如果需要,我想)。但是當我打電話查詢執行時,它將輸入值爲0.

db.Execute(updateCommand, projMgmt, projComments, sched, schedComments, ratingId) 

它需要爲後端正常工作的NULL值。我試過類型檢查,並通過NothingSystem.Data.SqlTypes.SqlInt32.Null等,但它要麼給轉換錯誤或設置爲0.我怎樣才能正確地通過它?

編輯:我遺漏了db.Execute方法中的第一個參數,傳入updateCommand。爲清晰起見進行編輯。

+0

您可以提供有關您的db.Execute方法的附加信息 - 對我來說看起來並不熟悉。它接受什麼參數? – sgeddes

+0

db.execute命令使用佔位符將值傳遞給sql語句(@ 0 = projMgmt,@ 1 = projComments ...)並在Razor中用於防止sql注入。我忘了在第一個參數中傳遞它執行的updateCommand。我現在編輯它。 http://www.asp.net/web-pages/tutorials/introducing-aspnet-web-pages-2/form-b​​asics –

回答

1

問題出在你的vb變量定義中。我假設你有一個整數,它必須是一個可以爲空(整數)到SQL的整數。這也可以寫成整數?

+0

我想我會關注。看起來整數的初始變量聲明默認爲0值,但聲明它爲空可以讓我檢查傳入的數字,如果需要的話保持爲空。但是,這與聲明Dim projMgmt = Nothing有什麼不同,哪個不起作用? http://msdn.microsoft.com/en-us/library/ms235245.aspx –

+1

您正在使用隱式聲明,這意味着您聲明的變量與您分配給它的變量的類型相同。 VB也會自動擴展類型轉換(C#不會)。當你Dim projMgmt = Nothing時,你會得到一個類型爲object的變量。用你的代碼中的一個你會得到一個字符串類型(可能)。您的數據庫正在儘可能處理這些數據。 Dim projMgmt As integer? =什麼都不會給你你需要的東西。記住字符串「」與Nothing不一樣。 –

+0

完美,謝謝!這對我學習很有幫助。 –

相關問題