Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程不插入到表中_C#_Sql_.net_Sql Server_Stored Procedures - Fatal编程技术网

C# 存储过程不插入到表中

C# 存储过程不插入到表中,c#,sql,.net,sql-server,stored-procedures,C#,Sql,.net,Sql Server,Stored Procedures,我在一个名为AddNewStudent的数据库中有一个简单的存储过程: CREATE PROCEDURE dbo.AddNewStudent( @fName nvarchar(20), @sName nvarchar(20), @lName nvarchar(20), @faculty nvarchar(10), @specialty nvarchar(50), @OKS smallint, @StudentStat smallin

我在一个名为AddNewStudent的数据库中有一个简单的存储过程:

    CREATE PROCEDURE dbo.AddNewStudent(
    @fName nvarchar(20),
    @sName nvarchar(20),
    @lName nvarchar(20),
    @faculty nvarchar(10),
    @specialty nvarchar(50),
    @OKS smallint,
    @StudentStat smallint,
    @fak nvarchar(50),
    @Course smallint,
    @Porok nvarchar(5),
    @Group int
    )
    AS
    INSERT INTO [Students] (FirstName, SecondName, LastName, Faculty,
    Specialty, OKS, StudentStatus, FakNumber, Course, Potok, [[Group]]])
    VALUES (@fName , @sName, @lName, @faculty, @specialty, @OKS,
    @StudentStat, @fak, @Course, @Porok, @Group)
    RETURN 2;
当我通过DatabaseExplorer VS2013测试该过程时,一切正常,记录被插入到表中。但是当我调用c中的过程时,什么都没有发生。下面是我用来调用过程的方法的代码:

    public static bool InsertStudent (Student student)
    {
        StudentDataClassesDataContext dc = new StudentDataClassesDataContext();
        try
        {
           int returnValue = dc.AddNewStudent(student.FirstName, student.SecondName, student.LastName, student.Faculty, student.Specialty, student.OKS, student.StudentStatus,
                student.FakNumber, student.Course, student.Potok, student._Group_);
            dc.SubmitChanges();
            MessageBox.Show("Return Value : " + returnValue, "Info", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        catch (Exception e)
        {
            MessageBox.Show("Exception : " + e.Message, "Info", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return false;
        }
        return true;
    }

返回的值是2,这意味着过程完成了它的工作,但是为什么没有记录插入到表中呢?我了解到使用dc.SubmitChanges代替Commit。

您可以启动Sqlserver Profiler来查看发生了什么,查看是否有任何事务在没有Commit的情况下启动? 此外,您还可以在dc.submitchange之后设置断点,当应用程序达到断点时,转到sql server并运行此查询

Select * from [Students] with (nolock)

确保数据在您的表中,然后继续运行应用程序并再次运行该查询,如果数据在您的表中,但没有数据,则存在未限制的事务。要解决这个问题,只需使用TransactionScope。如果数据从一开始就不在表中,您可能会在另一个数据库上运行代码。您可以在datacontext构造函数中传递connnctionstring。

代码一切正常。问题在于数据库和项目本身之间的链接

您是否看到返回值为2的消息框?您使用的是什么连接字符串?您是否在存储过程结束时提交?从SSME配置数据库,然后通过服务器资源管理器连接它,它将正常工作。我在.net中创建一个基于窗口的项目时遇到了同样的问题,所以这是我摆脱它的方法。尝试itHamlet Hakobyan:是的,我收到2作为返回值,我在消息框中看到它marc_s:我不使用连接字符串,因为我使用DataContext来建立连接Ramie:我不提交,但是,当从数据库调用过程时,我也不会提交,但会插入记录。dc.SubmitChanges也不做提交吗?SKT:你能告诉我如何从SSME配置我的数据库吗?嗨,RezaRahmati,谢谢你的回答。我确实在dc.submitchanges之后设置了一个断点,我检查了数据库,但没有插入任何记录。我尝试了另一种方法,但结果是一样的——没有插入任何记录。但是,当从数据库中选择查询时,它会返回信息。特权有问题吗?下面是我使用的新方法。正如您所看到的,我尝试使用TransactionScope,但没有任何更改。为了确保您在cmd.ExecuteNonQuery之后的查询中是否设置了withnolock,因为您的数据在事务中。除非您使用withnolock,否则在提交事务之前数据不会显示。否,我在查询中没有设置withnolock。是不是范围。完成提交事务?我的意思是,当您达到我在事务尚未提交之前提到的断点时,为了检查记录是否真的在表中,您还必须使用withnolock来获取脏记录。因为我想知道你说你已经检查了数据库,在断点处没有插入任何记录。你也可以给我发送sql profiler跟踪,看看发生了什么,因为你的代码似乎是正确的。要详细说明吗?