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

Compiler Can't create SqlConnection instance when getting string from file

我创建了一个 Windows Forms 应用程序,我正在从其中的数据库中获取数据,但是我遇到了一个问题:无法实例化 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); 时,我在 window 中看到与上面显示的连接字符串相同的字符串。

可能是什么问题?

问题实际上是文本文件中有两个斜线。该字符串在 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";

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