C#更新不更改数据库的存储过程

C#更新不更改数据库的存储过程,c#,.net,sql-server,stored-procedures,C#,.net,Sql Server,Stored Procedures,我看了类似的主题,但运气不好,看起来(对我来说)我做的事情是正确的,但数据库只是没有被更新 我的函数如下,参数值分别为1,“Connor Smith”,5,“New” [HttpPost, ValidateAntiForgeryToken] public ActionResult UpdateDevelopmentRequest(int changeID, string evaluator, int priority, string status) { SqlCommand cm

我看了类似的主题,但运气不好,看起来(对我来说)我做的事情是正确的,但数据库只是没有被更新

我的函数如下,参数值分别为1,“Connor Smith”,5,“New”

[HttpPost, ValidateAntiForgeryToken]
public ActionResult UpdateDevelopmentRequest(int changeID, string evaluator, int priority, string status)
{
        SqlCommand cmd = new SqlCommand(StoredProcedures.DevRequests.UpdateDevRequest, Conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@changeID", SqlDbType.Int).Value = changeID;
        cmd.Parameters.Add("@evaluator", SqlDbType.NVarChar, 30).Value = evaluator;
        cmd.Parameters.Add("@priority", SqlDbType.Int).Value = priority;
        cmd.Parameters.Add("@status", SqlDbType.NVarChar, 15).Value = status;

        //cmd.Parameters.AddWithValue("@changeID", changeID);
        //cmd.Parameters.AddWithValue("@evaluator", evaluator);
        //cmd.Parameters.AddWithValue("@priority", priority);
        //cmd.Parameters.AddWithValue("@status", status);

        Conn.Open();
        cmd.ExecuteNonQuery();
        Conn.Close();

        return RedirectToAction("DevelopmentRequests");
}
我的存储过程如下所示

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_UpdateDevRequests]
    @changeID INT,
    @evaluator NVARCHAR(30),
    @priority INT,
    @status NVARCHAR(15)
AS
    UPDATE it_ChangeRequest
    SET it_ChangeRequest.Evaluator = @evaluator, 
        it_ChangeRequest.Status = @status, 
        it_ChangeRequest.Priority = @priority
    WHERE ChangeID = @changeID
除了如图所示的代码和存储过程之外,我还尝试添加

int result = cmd.ExecuteNonQuery();
值正确时返回1,值不正确时返回0(我只希望更改1行)。我还单独运行了查询,在例如
Declare@changeID int=1
中对值进行了硬编码,使用此方法查询也很好

我整个上午都被难住了,希望能得到一些帮助


e:我还尝试将存储过程设置为仅
priority=2
,而不是
priority=@priority
,以确保它被指向并更新预期的DB,并且在执行此操作时所有操作都按预期进行

请尝试通过指定参数direction来更改您的POST操作,如下所示:

[HttpPost, ValidateAntiForgeryToken]
public ActionResult UpdateDevelopmentRequest(int changeID, string evaluator, int priority, string status)
    {
        using (var conn = new SqlConnection(<your_connection_string_goes_here>))
        using (SqlCommand cmd = new SqlCommand(StoredProcedures.DevRequests.UpdateDevRequest, Conn))
        {           
             cmd.CommandType = CommandType.StoredProcedure;

             /*
             cmd.Parameters.Add("@changeID", SqlDbType.Int).Value = changeID;
             cmd.Parameters.Add("@evaluator", SqlDbType.NVarChar, 30).Value = evaluator;
             cmd.Parameters.Add("@priority", SqlDbType.Int).Value = priority;
             cmd.Parameters.Add("@status", SqlDbType.NVarChar, 15).Value = status;
             */

             var param1 = cmd.Parameters.AddWithValue("@changeID", changeID);
             cmd.Parameters["@changeID"].Direction = ParameterDirection.Input
             param1.SqlDbType = SqlDbType.Int
             var param2 = cmd.Parameters.AddWithValue("@evaluator", evaluator);
             cmd.Parameters["@evaluator"].Direction = ParameterDirection.Input
             param2.SqlDbType = SqlDbType.NVarChar
             var param3 = cmd.Parameters.AddWithValue("@priority", priority);
             cmd.Parameters["@priority"].Direction = ParameterDirection.Input
             param3.SqlDbType = SqlDbType.Int
             var param4 = cmd.Parameters.AddWithValue("@status", status);
             cmd.Parameters["@status"].Direction = ParameterDirection.Input
             param4.SqlDbType = SqlDbType.NVarChar

             Conn.Open();
             // If you want you can specify the Timeout as below
             // cmd.CommandTimeout = 300;
             cmd.ExecuteNonQuery();
             Conn.Close();
        }
        return RedirectToAction("DevelopmentRequests");
    }
[HttpPost,ValidateAntiForgeryToken]
public ActionResult UpdateDevelopmentRequest(int changeID、字符串计算器、int优先级、字符串状态)
{
使用(var conn=new SqlConnection())
使用(SqlCommand cmd=newsqlcommand(StoredProcedures.DevRequests.UpdateDevRequest,Conn))
{           
cmd.CommandType=CommandType.storedProcess;
/*
cmd.Parameters.Add(“@changeID”,SqlDbType.Int).Value=changeID;
cmd.Parameters.Add(“@evaluator”,SqlDbType.NVarChar,30).Value=evaluator;
cmd.Parameters.Add(“@priority”,SqlDbType.Int).Value=priority;
cmd.Parameters.Add(“@status”,SqlDbType.NVarChar,15)。Value=status;
*/
var param1=cmd.Parameters.AddWithValue(“@changeID”,changeID);
cmd.Parameters[“@changeID”].Direction=ParameterDirection.Input
param1.SqlDbType=SqlDbType.Int
var param2=cmd.Parameters.AddWithValue(“@evaluator”,evaluator);
cmd.Parameters[“@evaluator”].Direction=ParameterDirection.Input
param2.SqlDbType=SqlDbType.NVarChar
var param3=cmd.Parameters.AddWithValue(“@priority”,priority);
cmd.Parameters[“@priority”].Direction=ParameterDirection.Input
param3.SqlDbType=SqlDbType.Int
var param4=cmd.Parameters.AddWithValue(“@status”,status);
cmd.Parameters[“@status”].Direction=ParameterDirection.Input
param4.SqlDbType=SqlDbType.NVarChar
Conn.Open();
//如果需要,可以按如下所示指定超时
//cmd.CommandTimeout=300;
cmd.ExecuteNonQuery();
康涅狄格州关闭();
}
返回重定向到操作(“开发请求”);
}

您的连接字符串是什么?您是否在多个操作之间共享相同的SqlConnection?众所周知,这会在web应用程序中产生bug和其他问题,您无法确保始终处于创建错误的同一线程上connection@Steve我的ConnString已经在多个方法中使用过,并且在所有方法上都很好地工作,只是没有更新这个方法。所有其他方法都读取数据。您是否在该连接字符串中使用DataDirectory?是否在
it\u ChangeRequest
上有任何触发器?您的代码中存在一些挑战。您需要将连接和命令对象包装在USING语句中。此外,不应使用sp_uu前缀。它是为女士保留的。要么使用不同的前缀,要么干脆不使用。对于手头的问题,表中是否有Change_ID为1的行?为什么要将正确定义的参数切换为使用AddWithValue?这是他们的倒退。varchar应该总是定义大小。我们刚刚尝试过这个,问题就来了persists@SeanLange我切换只是为了指定参数方向。因为,据我所知,另一种方法不容易定义方向。没有其他原因。@ConnorSmith是否可以启动sql配置文件并查看发送到存储过程的参数?所有这些参数都是输入参数,这是默认值,因此不需要在此处显式显示。可以在add方法中添加新参数。Add(新的SqlParameter([这里有许多构造函数,包括方向]);