我希望在SQL Server查询中包含一个文件路径,该查询是从C#执行的。文件路径是从textBox获得的,而textBox又是由打开的文件对话框提供的。 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。
答案 0 :(得分: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);
答案 1 :(得分: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”。
答案 2 :(得分: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(@"\\", @"\"));