none
sqlhelp使用存储过程的问题 RRS feed

  • 问题

  • sql help 类的内容
        static string ConnectionString;
        static SQLHelper()
        {
            //TODO: 在此处添加构造函数逻辑	
            ConnectionString = ConfigurationManager.ConnectionStrings["jiabaohrConnectionString"].ToString();
            //定义新的数据连接控件并初始化
        }
    
        #region 执行sql语句,返回受影响的行数。
        /// <summary>
        /// 执行sql语句,返回受影响的行数。
        /// </summary>
        /// <param name="SqlCommond">要执行的sql语句</param>
        /// <param name="param">sql参数</param>
        public static int ExecuteNonQuery(string cmdText, params SqlParameter[] param)
        {
            using (SqlConnection sqlcon = new SqlConnection(ConnectionString))
            {
                sqlcon.Open();
                using (var command = new SqlCommand(cmdText, sqlcon))
                {
                    command.Parameters.AddRange(param);
                    return command.ExecuteNonQuery();
                }
            }
        }
        #endregion

    2014年3月26日 3:56

答案

  • sql help 类的内容
        static string ConnectionString;
        static SQLHelper()
        {
            //TODO: 在此处添加构造函数逻辑	
            ConnectionString = ConfigurationManager.ConnectionStrings["jiabaohrConnectionString"].ToString();
            //定义新的数据连接控件并初始化
        }
    
        #region 执行sql语句,返回受影响的行数。
        /// <summary>
        /// 执行sql语句,返回受影响的行数。
        /// </summary>
        /// <param name="SqlCommond">要执行的sql语句</param>
        /// <param name="param">sql参数</param>
        public static int ExecuteNonQuery(string cmdText, params SqlParameter[] param)
        {
            using (SqlConnection sqlcon = new SqlConnection(ConnectionString))
            {
                sqlcon.Open();
                using (var command = new SqlCommand(cmdText, sqlcon))
                {
                    command.Parameters.AddRange(param);
                    return command.ExecuteNonQuery();
                }
            }
        }
        #endregion

    你好:

    这段代码不可以执行存储过程,只能执行普通的SQL语句。

    下面的ExecuteStoredProcedure方法可以执行存储过程并返回受影响的记录数,请参考一下:

    static string connectionString = "server=localhost;uid=sa;password=pwd;database=db;";
            static void Main(string[] args)
            {
    
                int result = ExecuteStoredProcedure("procedurename", new SqlParameter("param1", "value1"), new SqlParameter("param2", "value2"));
    
                Console.Read();
            }
    
            static int ExecuteStoredProcedure(string pName, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(pName, conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        cmd.Parameters.AddRange(ps);
    
                        return cmd.ExecuteNonQuery();
                    }
                }
            }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 彭123 2014年3月27日 3:09
    2014年3月27日 2:36
    版主

全部回复

  • 事件代码

    ArrayList myAL = new ArrayList();
            for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
            {
                CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
                GridViewRow row = GridView1.Rows[i];
                if (cbox.Checked)
                {
                    myAL.Add(row.Cells[1].Text);
                }
            }
            foreach (string s in myAL)
            {
                try
                {
                    SQLHelper.ExecuteNonQuery("spWorkTimeSubmitById",
                        new SqlParameter("@fid", s),
                        new SqlParameter("@status", 1));
                }
                catch(Exception ex)
                {
                    Label2.Text = ex.Message.ToString();
                }
            }

    2014年3月26日 4:21
  • 存储过程
    ALTER procedure [dbo].[spWorkTimeSubmitById]
    @fid int,
    @status int
    as
    --提交
    if(@status=1)
    begin
    if exists(select 1 from worktimeadd where FID=@fid and isnull(status,0)in (1,2,3,11))
    begin
    raiserror('该申请已经提交,请不要重复提交',16,1)
    return
    end
    update worktimeadd set Status=1,auditid='',amsg='',adate=null,confirmid='',cmsg='',cdate=null where FID=@fid and isnull(Status,0) in (0,10) --and (isnull(CMsg,'')<>'' or isnull(AMsg,'')<>'')
    end
    --反提交
    else if(@status=0)
    begin
    if exists(select 1 from worktimeadd where FID=@fid and isnull(Status,0) in(2,3,11))
    begin
    raiserror('该申请已经审核或批准,不能提交',16,1)
    return
    end
    update worktimeadd set Status=0 where FID=@fid --and Status=1
    end

    发生的错误
    过程或函数 'spWorkTimeSubmitById' 需要参数 '@fid',但未提供该参数。

    请问错在哪里了?

    2014年3月26日 4:35
  • sql help 类的内容
        static string ConnectionString;
        static SQLHelper()
        {
            //TODO: 在此处添加构造函数逻辑	
            ConnectionString = ConfigurationManager.ConnectionStrings["jiabaohrConnectionString"].ToString();
            //定义新的数据连接控件并初始化
        }
    
        #region 执行sql语句,返回受影响的行数。
        /// <summary>
        /// 执行sql语句,返回受影响的行数。
        /// </summary>
        /// <param name="SqlCommond">要执行的sql语句</param>
        /// <param name="param">sql参数</param>
        public static int ExecuteNonQuery(string cmdText, params SqlParameter[] param)
        {
            using (SqlConnection sqlcon = new SqlConnection(ConnectionString))
            {
                sqlcon.Open();
                using (var command = new SqlCommand(cmdText, sqlcon))
                {
                    command.Parameters.AddRange(param);
                    return command.ExecuteNonQuery();
                }
            }
        }
        #endregion

    你好:

    这段代码不可以执行存储过程,只能执行普通的SQL语句。

    下面的ExecuteStoredProcedure方法可以执行存储过程并返回受影响的记录数,请参考一下:

    static string connectionString = "server=localhost;uid=sa;password=pwd;database=db;";
            static void Main(string[] args)
            {
    
                int result = ExecuteStoredProcedure("procedurename", new SqlParameter("param1", "value1"), new SqlParameter("param2", "value2"));
    
                Console.Read();
            }
    
            static int ExecuteStoredProcedure(string pName, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(pName, conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        cmd.Parameters.AddRange(ps);
    
                        return cmd.ExecuteNonQuery();
                    }
                }
            }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 彭123 2014年3月27日 3:09
    2014年3月27日 2:36
    版主