更新数据库里的数据时发生这样的提示,网上有相同的问题的解释,但是我检查之后发现代码没有跟网上解释的一样的第一步的代码:public static void Proc(string strCommand, SqlParameter[] parameters, bool isText, out object value)
        {
            using (SqlConnection con = DBOperation.CreateConnection())
            {
                SqlCommand cmd = null;
                try
                {
                    con.Open();
                    if (parameters != null)
                    {
                        cmd = DBOperation.CreateCommand(strCommand, con, parameters, isText);
                    }
                    else
                    {
                        cmd = DBOperation.CreateCommand(strCommand, con, null, isText);
                    }                    value = cmd.ExecuteScalar();
                }
                catch (Exception e)
                {
                    throw new SystemException(e.Message, e);
                }
                finally
                {
                    con.Close();
                    con.Dispose();
                }
            }
        }
第二步的代码,调用第一步的代码:public object SetInfos(string strSql, SqlParameter[] parameters, bool isText)
        {
            object value = null;
            DBOperation.Proc(strSql, parameters, isText, out value);
            return value;
        }
第三步,调用第二步的代码:public void Submit()
    {
        Operator operate = new Operator();
        BaseOperate bOperate = new BaseOperate();
        int isAdd = Convert.ToInt32(Request.QueryString["isAdd"].ToString());
        string strSql = string.Empty;        try
        {
            int value = -1;
            string alert = string.Empty;
            SqlParameter[] parameters = null;            if (isAdd.Equals(1))
            {
                strSql = "m_add_t_novel";
                parameters = new SqlParameter[]{
                    DBOperation.CreateParameter("@n_name",SqlDbType.NChar,30,ParameterDirection.Input,this.txtNovelName.Value.ToString()),
                    DBOperation.CreateParameter("@n_gut",SqlDbType.NVarChar,4000,ParameterDirection.Input,this.txtGut.Value.ToString())
                };
                alert = "创建小说";
            }
            if (isAdd.Equals(2))
            {
                strSql = "m_update_t_novel";
                int n_id = Convert.ToInt32(Request.QueryString["n_id"].ToString());                parameters = new SqlParameter[]{
                    DBOperation.CreateParameter("@n_id",SqlDbType.Int,4,ParameterDirection.Input,n_id),
                    DBOperation.CreateParameter("@n_name",SqlDbType.NChar,30,ParameterDirection.Input,this.txtNovelName.Value.ToString()),
                    DBOperation.CreateParameter("@n_gut",SqlDbType.NVarChar,4000,ParameterDirection.Input,this.txtGut.Value.ToString()),
                    DBOperation.CreateParameter("@n_modDate",SqlDbType.DateTime,8,ParameterDirection.Input,DateTime.Now)
                };
                alert = "修改小说";
            }
            value = Convert.ToInt32(bOperate.SetInfos(strSql, parameters, false));
     
            if (0 < value)
            {
                alert = string.Format(alert + "{0}", "成功!");
            }
            else
            {
                alert = string.Format(alert + "{0}", "失败!");
            }
            operate.showMsg(this.Page, alert);
        }
        catch (Exception ex)
        {
            operate.showMsg(this.Page, ex.Message);
        }
    }
以下这段代码是创建SqlCommand的,网上的解释是这里出的问题,但是我水平有限,不明白private static SqlCommand CreateCommand(string strCommand, SqlConnection con, SqlParameter[] parameters, bool isText)
        {
            SqlCommand cmd = new SqlCommand(strCommand, con);
            
            if (!isText)
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }
            if (parameters != null)
            {
                foreach (SqlParameter parameter in parameters)
                {
                    cmd.Parameters.Add(parameter);
                }
            }            return cmd;
        }

解决方案 »

  1.   

    后台Paramerters传到数据库中的参数个存储过程的参数数量不一致。
      

  2.   

    to liuyeede
      我查看过了,没有不一致啊,主要是更新数据那个存储过程if (isAdd.Equals(2))
                {
                    strSql = "m_update_t_novel";
                    int n_id = Convert.ToInt32(Request.QueryString["n_id"].ToString());                parameters = new SqlParameter[]{
                        DBOperation.CreateParameter("@n_id",SqlDbType.Int,4,ParameterDirection.Input,n_id),
                        DBOperation.CreateParameter("@n_name",SqlDbType.NChar,30,ParameterDirection.Input,this.txtNovelName.Value.ToString()),
                        DBOperation.CreateParameter("@n_gut",SqlDbType.NVarChar,4000,ParameterDirection.Input,this.txtGut.Value.ToString()),
                        DBOperation.CreateParameter("@n_modDate",SqlDbType.DateTime,8,ParameterDirection.Input,DateTime.Now)
                    };
                    alert = "修改小说";
                }
    我的存储过程里面更新只有4个参数CREATE PROCEDURE m_update_t_novel
    @n_id int,
    @n_name nchar(30),
    @n_gut nvarchar(4000)
    AS
    BEGIN TRAN
       update t_novel set n_name=@n_name,n_gut=@n_gut  where n_id=@n_id
       select @@RowCount
    COMMIT TRAN
    GO
      

  3.   

    哈,你用了MVC,这一层一层的跳,不好看出哪出现了错误,你可以断点调试一下,看每一步你所更新的语句是如何执行的
      

  4.   

    明明三个参数,你却说四个参数。
    @n_id int,
    @n_name nchar(30),
    @n_gut nvarchar(4000)
                   parameters = new SqlParameter[]{
                        DBOperation.CreateParameter("@n_id",SqlDbType.Int,4,ParameterDirection.Input,n_id),
                        DBOperation.CreateParameter("@n_name",SqlDbType.NChar,30,ParameterDirection.Input,this.txtNovelName.Value.ToString()),
                        DBOperation.CreateParameter("@n_gut",SqlDbType.NVarChar,4000,ParameterDirection.Input,this.txtGut.Value.ToString()),
                        DBOperation.CreateParameter("@n_modDate",SqlDbType.DateTime,8,ParameterDirection.Input,DateTime.Now)
                    };
      

  5.   

    对啊,我原来的SQL是四个参数的,可能我原先改的时候把SQL改了没改回来
      

  6.   

     m_update_t_novel
    少了@n_modDate