c#+oracle用dataset更新问题

yingzi85 2009-03-17 09:20:00
现有一表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列为空值,所以更新不到数据库中,请问这种情况该怎么解决或用什么方式更新数据库比较好?
...全文
327 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuisea 2009-03-18
  • 打赏
  • 举报
回复
给你个例子

修改
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
}

yingzi85 2009-03-18
  • 打赏
  • 举报
回复
还是没弄好
jilate 2009-03-17
  • 打赏
  • 举报
回复
adapter更新的方式是调用adapter的updatecommand对象来更新的,可以手动修改adapter的upadtecommand的commandtext的sql语句,在insert的时候把id字段写成roacle的seq.netxvalue.这种是组件类的方式。


也可以利用adapter的rowupdating事件,具体是哪个不记得了。


111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧