存储过程不会插入表中

时间:2014-03-25 10:02:55

标签: 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 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#中调用该过程时,没有任何反应。 Bellow是我用来调用该过程的方法的代码:

    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。

2 个答案:

答案 0 :(得分:0)

你可以启动Sqlserver Profiler来查看发生了什么,看看是否有任何事务启动没有提交? 你也可以在dc.submitchanges()之后设置一个断点,当你的应用程序遇到断点时,转到sql server并运行这个查询

Select * from [Students] with (nolock)

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

答案 1 :(得分:-1)

代码一切正常。这个问题与数据库和项目本身之间的联系有关。