2013-10-23 39 views
-1

我有一個SQL存儲過程,它將數據庫和服務器名的名稱傳遞給用C#編寫的程序集。所謂在c#組件的方法是如下SQL nvarchar到C#CLR

Private static void GetData(string dbname, string servername) 
{ 
    ---blah 
    ---blah 
    ---blah 
} 

我遇到的問題是當SQL實例名或數據庫名具有反斜槓(例如machinename\2008r2)。

我得到異常運行存儲過程無法識別的字符\。我嘗試了一些基本的東西,例如在調用程序集之前在存儲過程中用\\代替\,這也失敗了。

在此先感謝。

+0

與\被解釋爲轉義字符的問題只能傾向於字符串出現*文字*,或者如果您將該字符串傳遞給也使用\作爲轉義字符的其他系統(例如'Regex')。如果該值通過'string'參數到達您的代碼,則不會有問題。您的問題中沒有足夠的代碼來查看問題 - 您向我們展示的只是一個簽名。 –

+0

調用該方法後失敗,因此只有方法定義。該方法內的第一行是 拋出新的異常(「在GetData()」); 這是爲了證明控制已經進入了方法。但是這個例外從未被提出。 – Abe

+0

然後,我希望這是很明顯的提及,錯誤是在你* *沒有向我們展示的代碼中。鑑於這顯然是一種私人方法,其他一些代碼正在調用它 - 是那裏的問題嗎? –

回答

0

這是一個轉義字符。你需要使用兩個反斜槓。

(例如)

{MachineName\\\NamedInstance} 
+0

是的,這是正確的。在我的存儲過程中,我嘗試用\\替換實例名稱和dbname。我仍然遇到同樣的問題。它是如何將sql傳遞給clr程序集的。 – Abe

0

確保您字符串傳遞到存儲過程的參數化之前。不知道您所設置了爲您的數據訪問代碼,但是,例如,SqlCommand類包含一個Parameters集合:

SqlCommand command= new SqlCommand("StoredProc", connection); 
command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add("@name", SqlDbType.NVarChar); 
command.Parameters["@name"].Value = dbName; 
command.Parameters.Add("@server", SqlDbType.NVarChar); 
command.Parameters["@server"].Value = server;