存储过程没有插入表
本文关键字:插入 存储过程 | 更新日期: 2023-09-27 17:52:54
我在数据库中有一个简单的存储过程,名为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看看会发生什么,看看是否有任何事务启动没有提交?您还可以在dc.submitchanges()之后设置一个断点,当应用程序达到断点时,转到sql server并运行此查询
Select * from [Students] with (nolock)
并确保数据在您的表中,之后继续运行应用程序并再次运行该查询,如果数据在您的表中并且没有它,则存在未提交的事务。要解决这个问题,只需使用TransactionScope。如果数据从一开始就不在表中,则可以在另一个数据库上运行代码。你可以在数据上下文构造函数中传递connectionstring
代码一切正常。问题在于数据库和项目本身之间的链接。