C# 4.0 即使在SQL Server 2008中成功执行命令,数据也不会保存到数据库中?

C# 4.0 即使在SQL Server 2008中成功执行命令,数据也不会保存到数据库中?,c#-4.0,sql-server-2008-r2,C# 4.0,Sql Server 2008 R2,我知道,这似乎是一个被问了一百万次的问题,但我又问了一遍,因为之前的答案并不能解决我的问题 我有一个存储过程: ALTER PROCEDURE [dbo].[My_Save_Command_SP] @Param1 varchar (50), @Param2 varchar (500), @Param3 varchar(500), @Param4 varchar (500), @Param5 varchar (500), @Param6 varch

我知道,这似乎是一个被问了一百万次的问题,但我又问了一遍,因为之前的答案并不能解决我的问题

我有一个存储过程:

ALTER PROCEDURE [dbo].[My_Save_Command_SP] 
    @Param1 varchar (50),
    @Param2 varchar (500),
    @Param3 varchar(500),
    @Param4 varchar (500),
    @Param5 varchar (500),
    @Param6 varchar (500) 
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE  @ParamID BIGINT 
    SET @ParamID = 0

    SET @ParamID = (SELECT ISNULL(ParamID,0) AS ParamID FROM t_MyTable WHERE Param1 = @Param1)

    IF @ParamID > 0 
    BEGIN
       UPDATE t_MyTable 
       SET Param2 = @Param2, Param3 = @Param3, Param4 = @Param4, 
           Param5 = @Param5, Param6 = @Param6
       WHERE Param1 = @Param1 
    END
    ELSE
    BEGIN
      SET @ParamID = (select ISNULL(MAX(ParamID),0) AS ParamID from t_MyTable) 
      SET @ParamID = @ParamID + 1

      INSERT INTO t_MyTable (ParamID, Param1, Param2, Param3, Param4, Param5, Param6) 
      VALUES (@ParamID, @Param1, @Param2, @Param3, @Param4, @Param5, @Param6)
    END
END  
下面是后端代码-

Boolean bResult = false;
Int32 nCounter = 0;
Int32 nAffectedRow = -1;

using (SqlConnection connection = DBAccessDA.CreateConnection())
{
    SqlCommand command = DBAccessDA.CreateCommand(connection);

    SqlTransaction transaction = connection.BeginTransaction();
    DBAccessDA.CreateStoredprocedure(command, "My_Save_Command_SP");

    for (int i = 0; i < pList.Count; i++)
    {
        nAffectedRow = -1;
        command.Parameters.Clear();
        DBAccessDA.AddInParameter(command, "@Param1", SqlDbType.VarChar, pList[i].Param1);
        DBAccessDA.AddInParameter(command, "@Param2", SqlDbType.VarChar, pList[i].Param2);
        DBAccessDA.AddInParameter(command, "@Param3", SqlDbType.VarChar, pList[i].Param3);
        DBAccessDA.AddInParameter(command, "@Param4", SqlDbType.VarChar, pList[i].Param4);
        DBAccessDA.AddInParameter(command, "@Param5", SqlDbType.VarChar, pList[i].Param5);
        DBAccessDA.AddInParameter(command, "@Param6", SqlDbType.VarChar, pList[i].Param6);

        // This line returns -1  
        nAffectedRow = DBAccessDA.ExecuteNonQuery(command, transaction); 

        if (nAffectedRow > 0)
        {
           nCounter++;
        }
     }

     if (nCounter == pList.Count)
     {
        transaction.Commit();
        bResult = true;
     }
     else
     {
        transaction.Rollback();
        bResult = false;
     }
  }
Boolean-bResult=false;
Int32 n计数器=0;
Int32行=-1;
使用(SqlConnection connection=DBAccessDA.CreateConnection())
{
SqlCommand=DBAccessDA.CreateCommand(连接);
SqlTransaction=connection.BeginTransaction();
DBAccessDA.CreateStoredprocedure(命令,“我的保存命令”SP);
对于(int i=0;i0)
{
nCounter++;
}
}
if(nCounter==pList.Count)
{
Commit();
bResult=true;
}
其他的
{
transaction.Rollback();
bResult=假;
}
}
如果使用相同的参数从SQL查询窗口运行存储过程,它将插入数据,但不会从代码中插入数据。请帮忙。谢谢。

来自@dan的评论:

我认为您的SP中的
SET NOCOUNT ON
语句就是问题所在。受影响的记录数为0,后端代码回滚事务。尝试从SP中删除该语句


您能告诉我DBAccessDA是什么吗?很难说,但乍一看,您似乎没有通过参数大小。您可以使用
SQL Profiler
在服务器上用您的命令执行语句。@heq,DBAccessDA是一个提供数据库连接、命令、在命令中添加参数等的类。简而言之,它用于消除编写类似数据库相关代码的需要。@danradu,我检查了探查器,探查器的SP运行,并在从sql查询窗口执行时将数据添加到数据库中。此外,我在同一应用程序中的其他操作中使用了相同的方法(没有参数大小),它们运行良好。我再次查看了您的代码,我认为是SP中的
SET NOCOUNT ON
语句造成了问题。受影响的记录数为0,后端代码回滚事务。尝试从SP中删除该语句。