OracleDataAdapter rar = new OracleDataAdapter(); conn.Open(); trans = conn.BeginTransaction(); OracleCommandBuilder cmdBuiler = new OracleCommandBuilder(rar); 事务名字呢?????
看了一下,你的OracleDataAdapter相对应的OracleCommand对像没有定义啊,当然不能更新... OracleCommand comm = new OracleCommand(conn); OracleDataAdapter rar = new OracleDataAdapter(Comm);
另外更新后DataTable后要调用AcceptChanges()。不然下次更新会有问题。
public static DataSet SelectOracleSrvRows(string myConnection, string mySelectQuery, string myTableName) { OracleConnection myConn = new OracleConnection(myConnection); OracleDataAdapter myDataAdapter = new OracleDataAdapter(); myDataAdapter.SelectCommand = new OracleCommand(mySelectQuery, myConn); OracleCommandBuilder cb = new OracleCommandBuilder(myDataAdapter); myConn.Open(); DataSet ds = new DataSet(); myDataAdapter.Fill(ds, myTableName); //Code to modify data in DataSet goes here... //Without the OracleCommandBuilder this line would fail. myDataAdapter.Update(ds, myTableName); myConn.Close(); return ds; }
public static DataSet SelectOracleSrvRows(string myConnection, string mySelectQuery, string myTableName) { OracleConnection myConn = new OracleConnection(myConnection); OracleDataAdapter myDataAdapter = new OracleDataAdapter(mySelectQuery,myConn); OracleCommandBuilder cb = new OracleCommandBuilder(myDataAdapter); DataSet ds = new DataSet(); myDataAdapter.Fill(ds, myTableName); //Code to modify data in DataSet goes here... //Without the OracleCommandBuilder this line would fail. myDataAdapter.Update(ds, myTableName); myConn.Close(); return ds;
我不明白为什么要查询? 如果是查询的话更新的也不是从datagridview中取得的数据啊
这个查询只是得到表的信息而已,没有其他的作用,你也可以只查询但是没有任何值的 比如select * from 表 where 1<>1 我觉的这个查询只是指定了要更新的是哪张表(-_-个人觉的,看其他高手怎么回答了)
问题是我已经按照上面的做了, 可结果还是不能更新到数据库里去啊 倒是datagridview更新了
public DataSet UpInfo(DataSet table,String tableName) { String connString = "Data Source=ORAKSJH;user=u_ksjh;password=smksjh"; OracleConnection conn = new OracleConnection(connString); OracleTransaction trans = null; try { OracleCommand cmd = new OracleCommand("SELECT * FROM CSHAREUSERINFO"); conn.Open(); trans = conn.BeginTransaction(); //trans = cmd.Transaction; OracleDataAdapter rar = new OracleDataAdapter(cmd); OracleCommandBuilder cmdBuiler = new OracleCommandBuilder(rar); rar.Update(table.Tables[tableName]); trans.Commit(); conn.Close(); } catch (Exception e) { e.ToString(); trans.Rollback(); if (conn.State == ConnectionState.Open) { conn.Close(); }
} return table; }
OracleCommand cmd = new OracleCommand("SELECT * FROM CSHAREUSERINFO"); 大哥看清楚 OracleCommand cmd = new OracleCommand("SELECT * FROM CSHAREUSERINFO",conn ); OK???
你加个判断吧 if(table.HasChanged()) 看看数据集里面有没有发生修改
还有你datagridview的数据源是怎么得到的,一起贴出来看看
没有发生改变,但是我取前台的datagridview取到了改变后的数据
那你把datagridview的数据源捞取代码帖来看看
try { con = new OleDbConnection(constr); con.Open(); OleDbCommand cmd = new OleDbCommand("Select St_CPID as 产品编号,St_CPName as 产品名称,St_CPAnquan as 安全存量 from TbStoreChanpinxinxi", con); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; OleDbCommandBuilder cbuild = new OleDbCommandBuilder(da); da.Update(dscpxx1, "TbStoreChanpinxinxi");//dscpxx1是自己在数据源类添加的DataSet生成的,似乎也可以是自定义的。 // dataGridView1.DataSource = dscpxx1.Tables["TbStoreChanpinxinxi"].DefaultView; // MessageBox.Show("更新成功"); con.Close(); con.Dispose(); cmd.Dispose(); da.Dispose(); dscpxx1.Dispose(); }这个是可以更新数据库的,虽然不是Oracle,但形式一样,只是语句不同。
for (int i = 0; i < import_gongzuo.Items.Count; i++)
{
id1 = import_gongzuo.DataKeys[i].ToString();//主键
gongzuo_ren1 = ((TextBox)import_gongzuo.Items[i].FindControl("gongzuo_ren")).Text;
gongzuomingcheng1 = ((TextBox)import_gongzuo.Items[i].FindControl("gongzuomingcheng")).Text;
gongzuoneirong1 = ((TextBox)import_gongzuo.Items[i].FindControl("gongzuoneirong")).Text;
gongzongwanchengshijian1 = ((TextBox)import_gongzuo.Items[i].FindControl("gongzuowanchengshijian")).Text;
gongzuoxuqiu1 = ((TextBox)import_gongzuo.Items[i].FindControl("gongzuoxuqiu")).Text;
sql = "update sale_gongzuo set zerenren='" + gongzuo_ren1 + "' , gongzuomingcheng = '" + gongzuomingcheng1 + "' ,gongzuoxiangxineir = '" + gongzuoneirong1 + "' ,querenshijian = '" + gongzongwanchengshijian1 + "' , zhichi = '" + gongzuoxuqiu1 + "' where id = " + id1;
DB.ExecSQLReInt(sql);
}我就这样更新页面的 datagrid的啊
看看这个
我参照那个改了,但是还是更新不到数据库啊
conn.Open(); trans = conn.BeginTransaction();
OracleCommandBuilder cmdBuiler = new OracleCommandBuilder(rar);
事务名字呢?????
transaction.Commit();
为OracleDataAdapter 指定一个SelectCommand
OracleDataAdapter rar = new OracleDataAdapter(Comm);
{
OracleConnection myConn = new OracleConnection(myConnection);
OracleDataAdapter myDataAdapter = new OracleDataAdapter();
myDataAdapter.SelectCommand = new OracleCommand(mySelectQuery, myConn);
OracleCommandBuilder cb = new OracleCommandBuilder(myDataAdapter); myConn.Open();
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName); //Code to modify data in DataSet goes here... //Without the OracleCommandBuilder this line would fail.
myDataAdapter.Update(ds, myTableName);
myConn.Close();
return ds;
}
{
OracleConnection myConn = new OracleConnection(myConnection);
OracleDataAdapter myDataAdapter = new OracleDataAdapter(mySelectQuery,myConn);
OracleCommandBuilder cb = new OracleCommandBuilder(myDataAdapter); DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName); //Code to modify data in DataSet goes here... //Without the OracleCommandBuilder this line would fail.
myDataAdapter.Update(ds, myTableName);
myConn.Close();
return ds;
如果是查询的话更新的也不是从datagridview中取得的数据啊
比如select * from 表 where 1<>1
我觉的这个查询只是指定了要更新的是哪张表(-_-个人觉的,看其他高手怎么回答了)
倒是datagridview更新了
{
String connString = "Data Source=ORAKSJH;user=u_ksjh;password=smksjh";
OracleConnection conn = new OracleConnection(connString);
OracleTransaction trans = null; try
{
OracleCommand cmd = new OracleCommand("SELECT * FROM CSHAREUSERINFO");
conn.Open(); trans = conn.BeginTransaction();
//trans = cmd.Transaction; OracleDataAdapter rar = new OracleDataAdapter(cmd);
OracleCommandBuilder cmdBuiler = new OracleCommandBuilder(rar); rar.Update(table.Tables[tableName]);
trans.Commit();
conn.Close();
}
catch (Exception e)
{
e.ToString();
trans.Rollback();
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
} return table;
}
大哥看清楚
OracleCommand cmd = new OracleCommand("SELECT * FROM CSHAREUSERINFO",conn ); OK???
if(table.HasChanged())
看看数据集里面有没有发生修改
{
con = new OleDbConnection(constr);
con.Open();
OleDbCommand cmd = new OleDbCommand("Select St_CPID as 产品编号,St_CPName as 产品名称,St_CPAnquan as 安全存量 from TbStoreChanpinxinxi", con);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
OleDbCommandBuilder cbuild = new OleDbCommandBuilder(da);
da.Update(dscpxx1, "TbStoreChanpinxinxi");//dscpxx1是自己在数据源类添加的DataSet生成的,似乎也可以是自定义的。
// dataGridView1.DataSource = dscpxx1.Tables["TbStoreChanpinxinxi"].DefaultView;
// MessageBox.Show("更新成功");
con.Close();
con.Dispose();
cmd.Dispose();
da.Dispose();
dscpxx1.Dispose();
}这个是可以更新数据库的,虽然不是Oracle,但形式一样,只是语句不同。
如果你的问题实在解决不了,不妨用循环来更新数据库。修改datagridview时,ID列为readonly,更新时循环datagridview中所有行(set NAME=datagirdview1.rows[i].cells[0].tostring() .....)