[英]C# Invalid object name ASP.NET
我正在尝试从我的表tblEmployees
检索记录到我的数据gridview dgvEmployees
。 我不确定有什么问题,可能是因为语法错误? 但是在使用MS Visual C#2010 Express(仅限WinForms)之前,代码已经运行。 我目前正在使用MS Visual Studio(ASP.NET - C#)创建一个包含winforms的网页。 这是我的代码:
SqlConnection sConn;
SqlDataAdapter daEmp;
DataSet dsEmp;
const string sStr = "Server = MYSERVER\\SQLEXPRESS; Database = EMPLOYEES; Integrated Security = SSPI";
protected void Page_Load(object sender, EventArgs e)
{
sConn = new SqlConnection(sStr);
daEmp = new SqlDataAdapter("Select * from tblEmployees", sConn);
dsEmp = new DataSet();
daEmp.Fill(dsEmp, "tblEmployees");
dsEmp.Tables["tblEmployees"].PrimaryKey = new DataColumn[] { dsEmp.Tables["tblEmployees"].Columns["EmployeeID"] };
dgvEmployees.DataSource = dsEmp.Tables["tblEmployees"];
}
这是此行的错误消息(daEmp.Fill(dsEmp, "tblEmployees");
Invalid object name 'tblEmployees'
请帮忙。 谢谢!
您现在正在网站上运行该应用程序,因此当您在连接字符串中使用Integrated Security = SSPI
时,将连接到SQL Server的用户是在IIS中运行应用程序池的用户。
你需要:
错误是指SQL查询而不是DataSet
。 换句话说,问题不在于C#。 您需要检查连接字符串并确保该表存在于DB中。
daEmp = new SqlDataAdapter("Select * from tblEmployees", sConn);
此查询不正确: Select * from tblEmployees
您可以通过将查询更改为: Select * from IDONTEXIST
来验证这Select * from IDONTEXIST
你会看到一个类似的错误:
无效的对象名称IDONTEXIST
您应该首先验证您的连接字符串:
几乎可以肯定,您的问题来自上面列出的一个或多个问题。
如果连接的数据库上下文与您认为的数据库不同,则可能找不到您要查找的对象。
如果对象引用不是模式限定的,则可能在解析对象引用时遇到问题。 SQL查询中的对象引用应该始终至少是模式限定的。 而不是说
select * from tblEmployees
你应该说
select * from dbo.tblEmployees
其中dbo
是拥有该对象的架构。 在运行时按以下顺序查找任何非模式限定的对象引用
dbo
模式(“数据库所有者”)以查找所需名称的对象。 对于存储过程,查找更复杂:
如果存储过程名称以“sp_”开头,
如果有问题的对象属于另一个模式,除非由所有者模式限定,否则将找不到该模式。
由于多个查找问题,缺少模式限定可能会阻止执行计划缓存,这意味着必须在每次执行查询时重新编译查询计划。 毋庸置疑,这对性能有不利影响。
此外,如果您的数据库用户是'dev'并且有问题的开发人员在6个月前在开发过程中创建了一个名为'dev.foo'的表或其他对象,那么您可能会感到有趣......结果。 现在你已经投入生产并以用户'dev'连接。 select * from foo
执行select * from foo
将优先绑定到dev.foo
,而不是DBA创建的实际生产表'dbo.foo'。 您的用户会想知道为什么他们的数据丢失了,或者您会想知道为什么当您通过SQL Management Studio查看它们时,应用程序抱怨缺少列时会出现错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.