set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ''' + cast(@id as varchar) + ''''

解决方案 »

  1.   


    CREATE proc Utest 
    @id as char(10) , 
    @name as char(10), 
    @pro as char(10) 
    as 
    begin 
      declare @sql as char(100) 
      set @sql=''  
      set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar) 
      exec(@sql) 
    end 
    GO 
      

  2.   

    CREATE proc Utest 
    @id as char(10) , 
    @name as char(10), 
    @pro as char(10) 
    as 
    begin 
      declare @sql as char(100) 
      set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ''' + @id +''''
      exec(@sql) 
    end 
      

  3.   

    dawugui 
    这位大哥,那天就是你帮我解决的,现在我看了看数据库,已经修改成功了,就是会提示错误
    如果不用存储过程能实现吗?
    就像这样:
     string id = Request.Form["YX_CH"]; 
            string name = this.DropDownList1.SelectedValue.ToString(); 
            string pro = this.DropDownList2.SelectedValue.ToString(); 
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]); 
            conn.Open(); 
            string sql = "update test set ' + @name + ' = 1 ,'+ @pro + '=1 where id = ' + cast(@id as varchar) "; 
            SqlCommand cmd = new SqlCommand(sql, conn); 
            cmd.ExecuteNonQuery(); 
            COMP.Jscript.AlertAndRedirect("修改成功!", "Default.aspx"); 
            conn.Close();
      

  4.   

    回sdhdy :
    我用的:
    set @sql = 'update test set ' + @name + ' = 1 ,'+@pro+'=1 where id = ' + cast(@id as varchar) 
    已经修改成功了,只是提示的错误应该是代码哪里错了吧?
    要是存储过程错了,修改不成功吧
      

  5.   


    存储过程是没有问题的,关键是你的c#代码写错了。GridView1.DataSource = mm.Utest(id.ToString(), name.ToString(), pro.ToString()).Tables[0].DefaultView; 
    这个地方。你这里执行的语句是修改,只能返回受影响的行数。
    Utest方法却还返回DataSet,这不胡扯吗?
    而且还绑定到GridView上面。oh, my god!
      

  6.   


    把你的c#改了。类似protected void btnOk_Click(object sender, EventArgs e)
        {
            DataBindB();
           
        }
        public void DataBindB()
        {
            string id = Request.Form["YX_CH"];
            string name = this.DropDownList1.SelectedValue.ToString();
            string pro = this.DropDownList2.SelectedValue.ToString();
            if( mm.Utest(id.ToString(), name.ToString(), pro.ToString())>0)
            {
               Jscript.AlertAndRedirect("修改成功!!", "111.aspx");
            }
        }
    Utest方法为:
    public int Utest(string id,string name, string pro) //修改返回值
        {        SqlParameter[] signInPara = {
                                              new SqlParameter("@id", id),
                                              new SqlParameter("@name", name),
                                              new SqlParameter("@pro",pro)
                                            };
            return DAL.SqlHelper.ExecuteDataset(DAL.SqlHelper.CONN_STRING, //把这个地方换成你的SqlHelper类中的执行返回受影响行数的方法,即ExecuteNonQuery这样的方法。可能你的SqlHelper类中的方法名并不叫这个。
            CommandType.StoredProcedure, "Utest", signInPara);
        }