C# 由于对对象的引用未解析,过程无法工作
我正在编写一个WPF应用程序,在某个时刻,我试图通过如下过程将新行添加到数据库中:C# 由于对对象的引用未解析,过程无法工作,c#,sql-server,wpf,visual-studio,C#,Sql Server,Wpf,Visual Studio,我正在编写一个WPF应用程序,在某个时刻,我试图通过如下过程将新行添加到数据库中: CREATE PROCEDURE dbo.InsertStudent @IdStudent INT, @FirstName VARCHAR(50), @LastName VARCHAR(50), @Address VARCHAR(50), @IndexNumber VARCHAR(50), @IdStudies INT AS SET NOCOUNT ON
CREATE PROCEDURE dbo.InsertStudent
@IdStudent INT,
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@Address VARCHAR(50),
@IndexNumber VARCHAR(50),
@IdStudies INT
AS
SET NOCOUNT ON
INSERT INTO [dbo].[apbd.Student]
([IdStudent]
,[FirstName]
,[LastName]
,[Address]
,[IndexNumber]
,[IdStudies])
VALUES
(@IdStudent
,@FirstName
,@LastName
,@Address
,@IndexNumber
,@IdStudies)
但每当我要使用它时,我都会出错:
SQL71502:过程:[dbo].[InsertStudent]具有对对象[dbo].[apbd.Student]的未解析引用
我一直在寻找解决方案,但我发现只有通过右键单击引用等方式向数据库添加引用,但我的解决方案资源管理器中没有此选项
也许我在错误的地方寻找它,但右键单击后我仅有的选项如下:
CREATE SCHEMA apbd;
GO
-- tables
-- Table: Student
CREATE TABLE apbd.Student (
IdStudent int NOT NULL IDENTITY,
FirstName nvarchar(100) NOT NULL,
LastName nvarchar(100) NOT NULL,
Address nvarchar(100) NOT NULL,
IndexNumber nvarchar(50) NOT NULL,
IdStudies int NOT NULL,
CONSTRAINT Student_pk PRIMARY KEY (IdStudent)
);
-- Table: Student_Subject
CREATE TABLE apbd.Student_Subject (
IdStudentSubject int NOT NULL IDENTITY,
IdStudent int NOT NULL,
IdSubject int NOT NULL,
CreatedAt datetime NOT NULL,
CONSTRAINT Student_Subject_pk PRIMARY KEY (IdStudentSubject,IdStudent,IdSubject)
);
-- Table: Studies
CREATE TABLE apbd.Studies (
IdStudies int NOT NULL IDENTITY,
Name nvarchar(100) NOT NULL,
CONSTRAINT Studies_pk PRIMARY KEY (IdStudies)
);
-- Table: Subject
CREATE TABLE apbd.Subject (
IdSubject int NOT NULL IDENTITY,
Name nvarchar(100) NOT NULL,
CONSTRAINT Subject_pk PRIMARY KEY (IdSubject)
);
-- End of file.
我将运行以下命令来确定表的实际名称和模式:
SELECT
CAST(
MAX(
CASE
WHEN
TABLE_SCHEMA = 'apbd'
AND TABLE_NAME = 'Student'
THEN 1
ELSE 0
END
) AS bit
) [The table is apbd.Student]
,
CAST(
MAX(
CASE
WHEN
TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'apbd.Student'
THEN 1
ELSE 0
END
) AS bit
) [The table is dbo.apbd.Student]
FROM INFORMATION_SCHEMA.TABLES
我还想知道您是否需要在CREATE
脚本开始时使用USE
语句-您是否在正确的数据库上创建了该过程
如果该表位于不同的数据库上,则需要在存储过程中引用该数据库,即默认情况下,MS SQL Server数据库只有一个模式(dbo)。出于安全或组织目的,您可以将架构添加到组中
在您的例子中,创建了模式apbd,并在该模式而不是dbo模式上创建了Student。因此,要引用该表,需要使用[apbd].[Student]。表名真的是[apbd.Student]吗?或者应该是[apbd].[Student]或者甚至[apbdStudent]错误暗示情况并非如此……发布为该表创建的语句怎么样?如果将
[dbo].[apbd.Student]
更改为apbd.Student
,会发生什么?那么它有效吗?@mjwills我确实重新测试了它,很抱歉造成了混乱……我想我之前肯定写了其他东西,但一开始我100%确定我确实写了[apbd].[Student]。不过,感谢您的时间和帮助:)。