SQL Server无法插入数据:‘dbo.information’对象名无效问题排查
这种情况我碰到过好多次,大概率是下面几个常见原因导致的,你可以一个个排查试试:
数据库上下文不对:你得先确认Visual Studio里的数据库连接,是不是指向了你创建
dbo.information表的那个数据库。有时候不小心连到了master或者其他数据库,自然找不到表。也可以在插入语句里明确加上数据库名称,比如写成INSERT INTO YourDatabaseName.dbo.information (...) VALUES (...),避免上下文混淆。大小写匹配问题:如果你的SQL Server用的是区分大小写的排序规则(比如
SQL_Latin1_General_CP1_CS_AS),那表名的大小写必须完全一致。比如你建表时写的是dbo.Information,但代码里用的是小写的information,就会触发这个错误。你可以跑个查询SELECT * FROM sys.tables WHERE name = 'information',看看系统表里存的表名实际是什么大小写。Visual Studio缓存拖后腿:IDE有时候会缓存旧的数据库架构,明明表已经建好了,它还停留在之前的状态。试试右键数据库连接选择「刷新」,或者干脆关掉Visual Studio重新打开,再不行就清理项目的bin和obj文件夹,把缓存文件删掉。
权限不足:当前连接数据库的用户可能没有访问
dbo.information表的权限。你可以给用户赋权:GRANT SELECT, INSERT ON dbo.information TO YourUserName;,或者检查这个用户是不是属于db_datareader、db_datawriter这类有读写权限的角色。表名歧义:虽然
information不是SQL Server的保留关键字,但有时候和系统视图名字接近可能会有歧义。试试把表名用方括号包起来写,比如INSERT INTO [dbo].[information] (...) VALUES (...),这样数据库就能准确识别你要操作的表了。ORM同步问题:如果你用了EF这类ORM框架,可能是模型和数据库没同步。比如Code First模式下没执行迁移,或者迁移没生效;Database First模式下没更新EDMX文件。得检查下ORM的模型映射,确保实体类和数据库表对应上了。
内容的提问来源于stack exchange,提问作者Due

