C# 由于对对象的引用未解析,过程无法工作

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

我正在编写一个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]的未解析引用

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

也许我在错误的地方寻找它,但右键单击后我仅有的选项如下:

  • 添加引用
  • 添加对服务的引用
  • 添加连接/连接/累积(或以任何方式转换)服务
  • 添加分析器
  • 管理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.
    

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

    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]。不过,感谢您的时间和帮助:)。