我的代码: protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;//单击一次“编辑”按钮
        string sql = string.Format("select * from WEBGIS08");
        refreshDgv(sql, true);
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
           
           string sqlStr = "update WEBGIS08  set TELEPHONE='" 
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',WORKID='"
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "' ,SEX='" 
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' ,BIRTHDAY='" 
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString().Trim() + "' ,QQ='" 
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim() + "' ,where NAME='"        
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text.ToString().Trim() + "'"; 
           
            OracleCommand  cmd=new OracleCommand (sqlStr ,DBcon .myConn );
            DBcon .myConn .Open ();
            int rowCount= cmd .ExecuteNonQuery();
            DBcon .myConn .Close ();
            if (rowCount >0)
            {
            GridView1 .EditIndex =-1;
            string sql1=string .Format ("select * from WEBGIS08");
            refreshDgv (sql1 ,true );
            }
      
    }    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        string sql=string .Format ("select * from WEBGIS08 ");
        refreshDgv (sql,true );}
refreshDgv方法:
public void refreshDgv(string sql,bool flag)
    {
        try
        {
            DataSet thisDataSet = new DataSet();
            OracleDataAdapter thisAdapter = new OracleDataAdapter(sql, DBcon.myConn);
            thisDataSet.Clear();
            DBcon.myConn.Open();
            //填充DataSet中的Datatable
            thisAdapter.Fill(thisDataSet, "WEBGIS08");            DataTable dataTable;
            dataTable = thisDataSet.Tables[0].Copy();
            GridView1.Visible = true;
            GridView1.DataSource = dataTable;
            GridView1 .DataSourceID =null;//很重要,在前台和后台都定义了DatasourceId,必须放弃一个定义,否则会提示“重复定义了”
            GridView1 .DataBind ();   
        }
        catch(OracleException ex)
        {
           throw ex ;  
        }
        finally 
        {
           DBcon .myConn .Close ();
           
        }
运行后,更新操作无效,在 int rowCount= cmd .ExecuteNonQuery();出现ORA-01747: user.table.column, table.column 或列说明无效,我检查了表的列名命名应该没问题,而且上述select语句也没找出语法错误,我该咋办呢?

解决方案 »

  1.   

    在string sqlStr = "update WEBGIS08 set TELEPHONE='"  设置一个断点,获取到sqlstr,在数据库里面执行。
      

  2.   

    这种情况我也遇到过,在你page_load中加上!IsPostBackif (!IsPostBack)//非回传页面
                {
                    DataBind(); //你绑定数据的方法,就是你首次加载数据的方法!
                }
      

  3.   


     protected void Page_Load(object sender, EventArgs e)
            {
                 if (!IsPostBack)
                {
                    DataBind();//你绑定数据的方法,就是你首次加载数据的方法!            }
            }
      

  4.   

    谢谢各位,我咋load_page里加了ispostback语句,然后把select语句重写,已经成功了