我已经创建了一个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);
时,我在窗口中看到与上面显示的连接字符串相同的字符串。
可能是什么问题?
答案 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";
此处@
符号告诉编译器以下字符串不包含任何转义序列并将其视为文字。这使得特别是在处理文件路径时更容易,因此您不必转义所有斜杠。