数据库连接报错:不支持关键字'@"data source'求助
解决读取存储的数据库连接字符串时的“Keyword not supported”错误
嘿,这个错误的原因其实很直接——你把C#里写字符串时的语法标记(@和外层双引号)也一起存到数据库A里了!
在C#代码里,@"是用来定义逐字字符串的语法:@让字符串里的反斜杠不用转义,外层的双引号是字符串的边界。但这些都不是连接字符串本身的内容啊!当你从数据库把带@"的字符串读出来直接用的时候,ADO.NET会把@"Data Source当成一个关键字来解析,这玩意儿它肯定识别不了,自然就报错了。
解决步骤
1. 修正数据库A里的存储内容
把数据库里当前存的那个连接字符串,改成去掉@和外层双引号的纯内容:
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\it_staff\source\repos\MonitorProduction_Client\MonitorProduction_Client\App_Data\monitorclientdb.mdf;Integrated Security=True
以后存连接字符串的时候,记住只存实际的连接参数,别把代码里的字符串语法标记也带进去。
2. 读取后的正确使用示例
读取出来之后,先确认一下字符串内容有没有多余的符号,然后正常创建连接就行:
// 从数据库A获取连接字符串 string dbBConnString = GetConnStringFromDB_A(); // 可选:调试时输出一下,确认内容正确 Console.WriteLine(dbBConnString); // 连接数据库B的正确姿势 using (SqlConnection conn = new SqlConnection(dbBConnString)) { try { conn.Open(); Console.WriteLine("数据库B连接成功!"); // 这里写你的数据库操作逻辑 } catch (Exception ex) { Console.WriteLine($"连接失败:{ex.Message}"); } // using块会自动释放连接资源,比手动调用conn.Close()更安全可靠 }
3. 额外提醒
- 要是担心路径里的反斜杠转义问题,其实在存储的时候完全不用管——C#里的@只是写代码时的语法糖,实际存储的字符串里反斜杠就是单个的,直接存正常的连接字符串就行。
- 数据库存的是数据,不是代码片段,别把代码里的语法符号混进去哦!
内容的提问来源于stack exchange,提问作者lew sitthisak




