Sql Server存储过程没有从MVC中执行
本文关键字:MVC 执行 Server 存储过程 Sql | 更新日期: 2023-09-27 18:03:37
我正在尝试从Asp执行Sql Server数据库中的存储过程。Net MVC项目。我以一种可以将其用于测试目的的方式设置了它,这就是为什么变量"procedureTest"是一个常量值(我知道"2044"是我数据库中的现有记录)。一旦我成功跑步,我就会改变这一点。此外,我知道我的存储过程是有效的,因为我已经在Sql Server Management Studio中成功地执行了它。该过程的任务是将ID从一个表添加到另一个表,但我还没有看到它出现在这个表中。我在catch块中没有收到错误,所以我现在有点迷路了。我肯定需要你的帮助。
try
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
int procedureTest = 2044;
var command = new SqlCommand("SELECT ID FROM Images WHERE ID = @id", connection);
var paramDate = new SqlParameter("@id", procedureTest);
command.Parameters.Add(paramDate);
var reader = command.ExecuteReader();
while (reader.Read())
{
var storedProcCommand = new SqlCommand("EXEC addToNotificationTable @ID", connection);
var paramId = new SqlParameter("@ID", reader.GetInt32(0));
storedProcCommand.Parameters.Add(paramId);
command.ExecuteNonQuery();
}
}
}
catch (Exception e)
{
string exceptionCause = String.Format("An error occurred: '{0}'", e);
System.IO.File.WriteAllText(@"C:'Users'Nathan'Documents'Visual Studio 2013'Projects'MVCImageUpload'uploads'exception.txt", exceptionCause);
}
存储过程:CREATE PROCEDURE addToNotificationTable @ID int
AS
Insert NotificationTable (ID)
SELECT ID
FROM Images
Where ID = @ID
像这样修改代码
while (reader.Read())
{
var storedProcCommand = new SqlCommand("EXEC addToNotificationTable @ID", connection);
var paramId = new SqlParameter("@ID", reader.GetInt32(0));
storedProcCommand.Parameters.Add(paramId);
storedProcCommand.ExecuteNonQuery();
}
首先,您没有指定命令类型。在SqlCommand中使用EXEC也不是正确的方式。
请尝试使用下面的代码
while (reader.Read())
{
using(SqlCommand storedProcCommand = new SqlCommand("addToNotificationTable", connection)) //Specify only the SP name
{
storedProcCommand.CommandType = CommandType.StoredProcedure; //Indicates that Command to be executed is a stored procedure no a query
var paramId = new SqlParameter("@ID", reader.GetInt32(0));
storedProcCommand.Parameters.Add(paramId);
storedProcCommand.ExecuteNonQuery()
}
}
由于您在while
循环中调用sp,因此将代码包装在using() { }
中以在每次迭代后自动处置命令对象