C# 存储过程不插入到表中
我在一个名为AddNewStudent的数据库中有一个简单的存储过程: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
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跟踪,看看发生了什么,因为你的代码似乎是正确的。要详细说明吗?