编译器从文件中获取字符串时无法创建SqlConnection实例

时间:2018-02-13 18:10:08

标签: c# sqlconnection

我已经创建了一个Windows窗体应用程序,我从中获取了数据库中的数据,但是我遇到了一个问题:SqlConnection对象无法实例化。

当我声明这个连接字符串时,它可以工作:

static string connectionString = "Data Source=DEVELOPMENT-PC\\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=True";

但是当我从文本文件中检索它时,它不起作用:

static string a = File.ReadAllText(Path.Combine(Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]), "connectionString.txt")).ToString();

有一点:当我写MessageBox.Show(a);时,我在窗口中看到与上面显示的连接字符串相同的字符串。

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

问题实际上是文本文件中有两个斜杠。字符串在C#中转义,但不需要在文本文件中转义。 C#是这样的:

"Data Source=DEVELOPMENT-PC\\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=True"

文本文件应该只有一个斜杠:

Data Source=DEVELOPMENT-PC\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=True

这是因为你在C#中转义斜杠,文本文件不需要转义字符串。例如,C#中的"This is my\nstring"之类的字符串是两行,如果你想在文本文件中使用相同的效果,你只需将它写在两行上。斜杠是转义序列的开始,通过写\你告诉它忽略它并在它的位置使用一个斜杠。

如果你只想在C#代码中使用一个斜杠,你也可以这样做:

static string connectionString = @"Data Source=DEVELOPMENT-PC\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=True";

此处@符号告诉编译器以下字符串不包含任何转义序列并将其视为文字。这使得特别是在处理文件路径时更容易,因此您不必转义所有斜杠。