首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行时解析SQL Server的文件路径

问如何在运行时解析SQL Server的文件路径
EN

Stack Overflow用户
提问于 2011-07-06 11:50:23
回答 3查看 2.6K关注 0票数 1

我希望在从C#执行的SQL Server查询中包含文件路径。文件路径从textBox获取,该turn由打开的文件对话框提供。SQL server查询包含在以下字符串中:

代码语言:javascript
复制
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);

其中,在运行时:

代码语言:javascript
复制
    this.textBoxAcctPath.Text = "J:\\CCCDataVic\\RMH\\PE1006Data\\DHCC.xls";

当然,当这个字符串解析回屏幕时,文件路径字符串看起来应该是这样的:'J:\CCCDataVic\RMH\PE1006Data\DHCC.xls‘。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-06 12:25:45

尝尝这个

代码语言:javascript
复制
string path = new Uri(this.textBoxAcctPath.Text).AbsolutePath;

但是如果您提供了无效路径,这将抛出异常,因此我建议您使用以下代码

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2011-07-06 13:45:17

如果我正确理解了原文,您可能会因为Visual Studio调试器而感到困惑。例如,考虑下面的C#代码:

代码语言:javascript
复制
    string str = "a\\b"; 

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

如下所示:字符串a\b的长度为3

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

代码语言:javascript
复制
"a\\b"

,但它在执行时被存储在计算机中(从非常简单的角度来看),即"a\b“。

票数 2
EN

Stack Overflow用户

发布于 2011-07-06 12:29:10

试一试:

代码语言:javascript
复制
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(@"\\", @"\"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6591358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档