Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时解析SQL Server的文件路径_C#_Sql_Tsql_Sql Server 2008 - Fatal编程技术网

C# 如何在运行时解析SQL Server的文件路径

C# 如何在运行时解析SQL Server的文件路径,c#,sql,tsql,sql-server-2008,C#,Sql,Tsql,Sql Server 2008,我希望在从C#执行的SQL Server查询中包含一个文件路径。文件路径是从文本框中获取的,而文本框又由打开的文件对话框提供。SQL server查询包含在以下字符串中: string strSqlAcctSelect = String.Format("SELECT Code AS dhAccountType, Name as dhAcctName

我希望在从C#执行的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";
当然,当这个字符串被解析回屏幕时,文件路径字符串看起来应该是:“J:\CCCDataVic\RMH\PE1006Data\DHCC.xls”

问题是:如何在C#(如上所述)中使用文字“\”(单反斜杠)在SQL查询中包含包含路径的字符串,而不解析查询“\”(双反斜杠)

无论您做什么,字符串都会被解析为SQL,其中包含SQL不喜欢的双反斜杠。

试试这个

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);
试试这个

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);
尝试一下:

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(@"\\", @"\"));
尝试一下:

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(@"\\", @"\"));

如果我正确理解了原始帖子,您可能会因为VisualStudio调试器而感到困惑。 例如,考虑这个C代码:

这将显示:字符串a\b的长度为3

在Visual Studio中,调试器会将str的内容显示为:

"a\\b"

,但它在执行时(采用非常简化的视图)以“a\b”的形式存储在计算机中

如果我正确理解了原始帖子,您可能会因为Visual Studio调试器而感到困惑。 例如,考虑这个C代码:

这将显示:字符串a\b的长度为3

在Visual Studio中,调试器会将str的内容显示为:

"a\\b"

,但它在执行时(采用非常简化的视图)以“a\b”的形式存储在计算机中

定义“哪个SQL不喜欢”。SQL确实喜欢双反斜杠;-))这不是一个解决方案,但您可以改为使用“/”。否则,我会尝试将其视为逐字字符串文字:
This.textBoxAcctPath.Text=@“J:\CCCDataVic\RMH\PE1006Data\DHCC.xls”This.textBoxAcctPath.Text=@“J:\CCCDataVic\RMH\PE1006Data\DHCC.xls”