Как разобрать путь к файлу к SQL Server во время выполнения - PullRequest
1 голос
/ 06 июля 2011

Я хочу включить путь к файлу в запрос SQL Server, который выполняется из C #. Путь к файлу получается из textBox, который, в свою очередь, предоставляется диалогом открытия файла. Запрос к серверу SQL содержится в следующей строке:

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";

Когда эта строка анализируется обратно на экран, конечно, строка пути к файлу выглядит следующим образом: 'J: \ CCCDataVic \ RMH \ PE1006Data \ DHCC.xls'.

Проблема заключается в следующем: как включить строку, содержащую путь, в запрос SQL в C # (как указано выше) с использованием литерала "\" (одиночная косая черта) без анализа запроса "\" (двойная косая черта )

Что бы вы ни делали, строка анализируется в SQL, содержащем двойную косую черту, которая не нравится SQL.

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Если я правильно понял исходное сообщение, вы можете запутаться из-за отладчика Visual Studio. например рассмотрим этот код C #:

    string str = "a\\b"; 

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

Отображается: строка a \ b имеет длину 3

В Visual Studio отладчик будет отображать содержимое строки как:

"a\\b"

, но он сохраняется на компьютере во время выполнения (в очень упрощенном виде) как "a \ b".

2 голосов
/ 06 июля 2011

Попробуйте это

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);
1 голос
/ 06 июля 2011

Попробуйте:

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(@"\\", @"\"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...