由于无法解析对对象的引用

时间:2019-04-09 23:18:40

标签: 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

    INSERT INTO [dbo].[apbd.Student]
           ([IdStudent]
           ,[FirstName]
           ,[LastName]
           ,[Address]
           ,[IndexNumber]
           ,[IdStudies])
    VALUES
           (@IdStudent
           ,@FirstName
           ,@LastName
           ,@Address
           ,@IndexNumber
           ,@IdStudies)

但是每当我要使用它时,都会出现错误:

  

SQL71502:过程:[dbo]。[InsertStudent]对对象[dbo]。[apbd.Student]有未解决的引用。

我一直在寻找解决方案,但是我发现只是通过右键单击“引用”等来添加对数据库的引用,但是我的解决方案资源管理器中没有此选项。

也许我在错误的位置寻找它,但是右键单击后我唯一的选择就是这样:

  1. 添加参考...
  2. 添加对服务的引用...
  3. 添加连接/连接/累积(或应翻译)的服务
  4. 添加分析器...
  5. 管理NuGet数据包...

关于在数据库中创建表的代码:

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.

2 个答案:

答案 0 :(得分:1)

我将运行以下命令来确定表的实际名称和架构:

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

我还想知道您是否可能在USE脚本的开始处需要一个CREATE语句-您是否在正确的数据库上创建过程?

如果表位于其他数据库上,则需要在存储过程中引用数据库,即[DatabaseName].[dbo].[apbd.Student]

答案 1 :(得分:0)

默认情况下,MS SQL Server数据库只有一个架构(dbo)。您可以出于安全或组织目的将架构添加到组中。

在您的情况下,已创建模式apbd,并在该模式而不是dbo模式上创建了Student。因此,要引用该表,您需要使用[apbd]。[Student]。