2011-07-06 60 views
0

我希望在從C#執行的SQL Server查詢中包含文件路徑。文件路徑是從文本框獲得的,而文本框又由打開的文件對話框提供。 SQL Server查詢包含在以下字符串:如何在運行時解析SQL Server的文件路徑

string strSqlAcctSelect = String.Format("SELECT Code AS dhAccountType, 
                Name as dhAcctName 
              INTO {0} " + "FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0; DATABASE = 
    {1}', 'SELECT * FROM " + "[Sheet1$]')", strAcctTabName, this.textBoxAcctPath.Text); 

凡在運行時:

this.textBoxAcctPath.Text = "J:\\CCCDataVic\\RMH\\PE1006Data\\DHCC.xls"; 

當此字符串被解析回當然屏幕的文件路徑字符串看起來理所應當:「Ĵ :\ CCCDataVic \ RMH \ PE1006Data \ DHCC.xls'。如何在不解析查詢「\」的情況下使用文字「\」(單斜槓)在C#中的SQL查詢中包含一個路徑的字符串(如上所示)削減)?

不管你做什麼,字符串都被解析爲包含SQL不喜歡的雙反斜槓的SQL。

+0

定義「哪個SQL不喜歡」。 SQL確實像雙反斜槓;-)))) – zerkms

+1

這不是一個解決方案,但可以使用「/」來代替。 – dawebber

+2

否則,我會嘗試把它當作逐字字符串文字: 'this.textBoxAcctPath.Text = @「J:\ CCCDataVic \ RMH \ PE1006Data \ DHCC.xls」;' 這當然只適用於字符串值是預先指定的。 – dawebber

回答

2

試試這個

string path = new Uri(this.textBoxAcctPath.Text).AbsolutePath; 

但是,如果你提供無效的路徑,這將引發異常,所以我建議你使用下面的代碼

string validPath = string.Empty; 

if (Uri.TryCreate(this.textBoxAcctPath.Text, UriKind.Absolute, out uri)) 
{ 
    validPath = uri.AbsolutePath;    
} 
else 
{ 
    throw new ArgumentException("Invalid Path"); 
} 


string strSqlAcctSelect = String.Format("SELECT Code AS dhAccountType, 
                Name as dhAcctName 
              INTO {0} " + "FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0; DATABASE = 
    {1}', 'SELECT * FROM " + "[Sheet1$]')", strAcctTabName, validPath); 
+0

這些都在一定程度上工作。他們刪除雙反斜槓。然而,這個類用正斜槓代替它們。爲了解決這個問題,我嘗試了「string path = new Uri(this.textBoxCCTabPath.Text).LocalPath;」這又產生了雙重的雙反斜槓。任何其他想法? – MoonKnight

+0

這是要走的路。 SQL接受「/」作爲路徑分隔符。非常感謝您的幫助。 – MoonKnight

1

試試這個:

string strSqlAcctSelect = String.Format("SELECT Code AS dhAccountType, 
                                                     Name as dhAcctName 
                                           INTO {0} " + "FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0; DATABASE = 
    {1}', 'SELECT * FROM " + "[Sheet1$]')", strAcctTabName, this.textBoxAcctPath.Text.Replace(@"\\", @"\")); 
+0

這不起作用,因爲我試過這個。非常感謝您的幫助。 – MoonKnight

+0

這不起作用,你必須做下面的事情。 string path = this.textBoxAcctPath.Text.Replace(@「\\\」,@「\」)); 然後通過此參數'路徑' – Lamps

2

如果我已經正確理解原始文章,那麼您可能會因爲Visual Studio調試器而感到困惑。 例如考慮此C#代碼:

string str = "a\\b"; 

    MessageBox.Show(string.Format("string {0} has length {1}", str, str.Length)); 

這顯示:字符串A \ B具有長度3

在Visual Studio中,調試器將顯示str的內容爲:

"a\\b" 

,但它在執行時存儲在計算機中(以非常簡化的視圖)作爲「a \ b」。

+0

這不是問題。謝謝你的幫助。 – MoonKnight