现有一表table1,其中一个字段为id,用触发器和sequences使其自增,并设为主键, //数据库数据更新函数
        public DataSet UpdateDataBase(string strSQL, DataSet changedDataSet, string tableName)
        {
            myConnection = new OracleConnection(strConn);
            da = new OracleDataAdapter(strSQL, myConnection);
            builder = new OracleCommandBuilder(da);
            da.Update(changedDataSet, tableName);
            return changedDataSet;
            //返回更新了的数据库表
        } //检索数据库数据函数(传字符串,直接操作数据库),返回填充了数据的dataset
        public DataSet SelectDataBase(string tempStrSql)
        {
            strSQL = tempStrSql;
            myConnection = new OracleConnection(strConn);
            sda = new OracleDataAdapter(strSQL, myConnection);
            OracleCommandBuilder cb = new OracleCommandBuilder(sda); //这句要有
            ds.Clear();
            sda.Fill(ds);
            //返回填充了数据的DataTable
            return ds;  
        
        }//查询代码
string str="select * from table";
DataSet ds=SelectDataBase(str);
DataGridView1.DataSource=ds.tables[0];//更新代码
UpdateDataBase(str, ds, "table");现在的问题是,DataGridView1并不显示id列,当新增一行时,由于ds中id列为空值,所以更新不到数据库中,请问这种情况该怎么解决或用什么方式更新数据库比较好?

解决方案 »

  1.   

    adapter更新的方式是调用adapter的updatecommand对象来更新的,可以手动修改adapter的upadtecommand的commandtext的sql语句,在insert的时候把id字段写成roacle的seq.netxvalue.这种是组件类的方式。
    也可以利用adapter的rowupdating事件,具体是哪个不记得了。
      

  2.   

    给你个例子修改
    public void UpdateTable()
            {
                SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);
                SqlDataAdapter da = new SqlDataAdapter("SELECT id, name FROM tt", conn);
                DataSet ds = new DataSet();
                da.Fill(ds,"tt");            da.UpdateCommand = new SqlCommand("UPDATE tt SET name= @name WHERE id = @did", conn);
                da.UpdateCommand.Parameters.Add("@did", SqlDbType.NVarChar, 8, "id");
                da.UpdateCommand.Parameters.Add("@name", SqlDbType.NVarChar, 20, "name");
                SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);
                ds.Tables["tt"].Rows[0]["name"] = "34";
                da.Update(ds.Tables["tt"]);
            }
    public void AddTable()
    添加
            {
                SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);
                SqlDataAdapter da = new SqlDataAdapter("SELECT id, name FROM tt", conn);
                DataSet ds = new DataSet();
                da.Fill(ds,"tt");            SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);
                DataRow row = ds.Tables["tt"].NewRow();
                row[0] = 3;
                row[1] = "ads";
                ds.Tables["tt"].Rows.Add(row);
                da.Update(ds.Tables["tt"]);//直接Update
            }