2017-02-02 11 views
0

我有一個應用程序針對不同的標準對多個字段進行搜索。跟蹤中的SQL參數與c中分配的值不匹配#

Search Bar

我的數據模型似乎當我調試進行相應的更新,但我作爲傳遞SQL參數是不正確的,我認爲。一個SQL跟蹤顯示我這是發送到數據庫的內容。

exec nu_sp_Codetable_GetWSub @address=N'1234 r%', @wo=N'%', @sub=N'%', @daysback=1096, @marketareaid=99, @po=N'%', @plan=N'%', @super=N'%', @builder=N'%'

我的問題在我的實際參數值的前面與「N」做(我們使用模量爲默認值,因爲原因)。我不知道它來自哪裏,如果它來自我的代碼。以下是將此搜索提交給數據庫的代碼。

UpdateMainGrid(String.Concat(Address, "%"), "%", "%", SelectedDaysBack, SelectedMarketAreaItem.marketareaid, "%", "%", "%", "%")

我跑這個作爲搜索的最簡單的形式,你能看到的代碼(這個特定的搜索)具有硬編碼爲每個參數這些默認模量。在這個例子中,只有地址變量實際上是一個設定值。

上面顯示的更新方法將字符串傳遞到我們用來連接到SQL的類中,這就是爲什麼我沒有提供代碼的原因。調試表明數據在這些步驟中不會改變,它只是在SQL跟蹤中有所不同。另外,我在跟蹤中查詢的其他查詢不包括'N'。如果有的話,我不知道有什麼不同。

+0

'N'表示該值被視爲NVARCHAR而不是VARCHAR。 – Crowcoder

+0

謝謝。這是一個非常簡單的答案。我在谷歌失敗...... – Jon

回答

2

N在SQL中用於表示一個unicode字符串。

它代表國家語言字符集。

就像你可以在C#中做到這一點:

decimal d = 0.3m;

在年底額外的M不改變實際值,它僅僅是一個更明確的表示。

+0

所以這對SQL執行語句毫無意義?我可能是簡單化了,但varchar和nvarchar,雖然本質不同,在這種情況下不會有任何不同的行爲?我手動從軌跡中執行了執行,並得到了同樣的結果。我只是想在我開始解剖我的SQL查詢之前弄清楚它爲什麼不起作用。 – Jon

+0

它可以有所作爲,特別是當你傳遞一個nvarchar但索引列是varchar的索引時,它會將該列轉換爲nvarchar進行比較,而不是使用索引。 –

+0

我在測試時只包含'%'作爲參數,還是需要將'N'放入exec?另外,將腳本中的參數數據類型更改爲nvarchar以匹配exec上的符號是否合適?我沒有真正使用這個'N'符號的用法或功能,我想在解析我的SQL查詢時確定如此,我會弄清楚爲什麼它不起作用。 – Jon

0

默認情況下,參數作爲nvarchar發送到sql。這樣做是爲了允許它接受參數的最大可能值,並根據服務器中的列處理轉換爲類型。 N簡單地將字符串定義爲Nvarchar而不是varchar