数据库新增列后C#代码读取报错无效列名问题求助
问题原因及解决步骤
首先注意,报错Invalid column name "Achternaam"是SQL Server数据库引擎抛出的错误,和你本地配置的DataSet无关:你当前的代码没有使用自定义的DataSet,是直接向数据库发送SQL语句执行,数据库识别不到列说明是SQL执行上下文的问题,按以下顺序排查:
1. 优先核对连接字符串指向的数据库
- 确认你代码里
connectionString指向的数据库,和你添加列的数据库是同一个,大部分同类问题都是开发环境多实例串库、或者连到了测试库导致的 - 可以直接在数据库管理工具里用
connectionString对应的账号地址连接库,执行你的SQL语句SELECT * from Clienten ORDER BY Achternaam ASC,如果同样报错说明数据库侧列确实没加对/加错了库
2. 检查列名拼写、特殊字符问题
- 确认列名拼写完全一致,注意如果数据库排序规则是大小写敏感的,
Achternaam和achternaam会被识别为不同列 - 如果列名添加的时候带了空格、特殊字符,或者是SQL关键字,需要用方括号包裹列名,修改后的查询示例:
string query = "SELECT * from Clienten ORDER BY [Achternaam] ASC";
后面计算列的表达式也同步调整:
clientenTable.Columns.Add("Naam", typeof(String), "[DhrMevr] + ' ' + [Voornaam] + ' ' + [Achternaam]");
3. 确认表的Schema归属
- 确认
Clienten表的Schema是不是默认的dbo,如果是自定义Schema,需要在查询里明确指定,示例:
string query = "SELECT * from dbo.Clienten ORDER BY Achternaam ASC";
4. 检查是否有未提交的事务
- 如果你之前添加列的时候是在数据库管理工具的事务中操作,没有提交的话,其他连接(比如你的C#程序的连接)是看不到新增列的,回到数据库管理工具提交事务即可
如果你在数据库管理工具里执行相同SQL完全正常,只有代码里报错,100%是连接字符串指向的数据库不对,直接打印
connectionString的值核对就能定位问题。
内容的提问来源于stack exchange,提问作者Mirelle
相关产品推荐
相关产品推荐

