c#中表名的对象名sql异常无效
本文关键字:sql 异常 无效 对象 | 更新日期: 2023-09-27 18:21:15
我写了这段代码,但它不起作用。给出无效的对象名称"Inventory"。有什么建议吗?
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString =
@"Data Source=(local);Integrated Security=SSPI;" +
"Initial Catalog=AutoLot";
cn.Open();
string strSQL = "Select * From Inventory";
SqlCommand myCommand = new SqlCommand(strSQL, cn);
// Obtain a data reader a la ExecuteReader().
using (SqlDataReader mydatareader = mycommand.ExecuteReader())
{}
是否存在签入数据库库存表,如果存在,则两个名称应为相同的
如果您检查了所有数据库设置、访问权限和表定义,仍然无法消除该错误?
这是因为ASP.net无法理解您的SQL查询——尽管这听起来很令人震惊。
我也遇到了同样的问题,UPDATE
语句想要使用aliases
,而不是通常期望的dbo.myTable
名称定义。
避免这种情况的最简单方法是将代码放入Stored Procedure
中,因为asp.net不会像SQL Server那样解析SQL(!!)。
这是我的SQL直接从SQL Server 2005,它工作得很好…
UPDATE tsa
SET tsa.ActionComplete = @ActionComplete,
tsa.CompleteDate = GETDATE(),
tsa.Notes = @ActionNotes
FROM blahblah
WHERE blahblah
但无论出于何种原因,SqlDataSource
控件中的ASP.net解析器都无法理解它(尽管它在GUI的测试查询功能中完美运行!)。
我得到
"tsa"中的对象名称无效
所以我把这个批次放在一个存储过程中。。。
USE [mydatabase];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[spTETupdateActions]
@StudentID VARCHAR(10),
@ActionComplete INT = 0,
@ActionNotes VARCHAR(MAX),
@TETmeetingID INT,
@WeekNo INT,
@TETID INT,
@TETdate DATETIME,
@ActionItem VARCHAR(MAX)
WITH
EXEC AS CALLER AS
UPDATE tsa
SET tsa.ActionComplete = @ActionComplete,
tsa.CompleteDate = GETDATE(),
tsa.Notes = @ActionNotes
FROM blahblah
WHERE blahblah
GO
瞧!不再有错误!为什么?因为SQL的解析是在SQL Server而不是ASP.net中完成的!