问个OracleClient的问题!!!!!!!!!!!!!!
代码如下OracleDataAdapter DaSql = new OracleDataAdapter();
OracleCommand sqlcmd = new OracleCommand();
sqlcmd.CommandText = "select * from tableName";
sqlcmd.Connection = ConnSql;--ConnSql为链接OracleConnection
DaSql.SelectCommand = sqlcmd;
OracleCommandBuilder sb = new OracleCommandBuilder(DaSql);
DaSql.InsertCommand = sb.GetInsertCommand();
DaSql.Fill(dtTarget)
DaSql.Update(dtTarget); --dtTarget的结构和tableName表一致
为何执行下来不会报错,但也不会把数据插入到数据库中???
--------------------编程问答-------------------- DaSql.InsertCommand 应该没有获得正确的值
试着把值打印出来看看。 --------------------编程问答-------------------- sb.GetInsertCommand().CommandText是下面这条sql
INSERT INTO DTS200810291557349 (COL1, COL2) VALUES (:p1, :p2)
帮忙看看,谢谢
--------------------编程问答-------------------- Oracle默认情况下是只提提交SQL到数据库服务器
但是并不提交事务
也就是说,对于一个Oracle会话,除非手动提交事务,否则在会话结束后全部回滚
这样自然就没有真正更新数据库了
试着用对象浏览器找一下 OracleComment 或其它 Oracle 类中是否有关 AutoCommit 或 Commit 的函数
--------------------编程问答-------------------- 这是别人写的sqlserver的,oracle应该没太大区别的
private void UpdateData()
{
//建立Connection
SqlConnection scConnection = new SqlConnection(sConnection);
//建立Command
SqlCommand scCommand = scConnection.CreateCommand();
scCommand.CommandText = "select customerID,contactName from customers";
//建立Adapter
sdaAdapter = new SqlDataAdapter(scCommand);
//该对象负责生成用于更新数据库的SQL语句,不必自己创建这些语句
scbBuilder = new SqlCommandBuilder(sdaAdapter);
//得到数据
sdaAdapter.Fill(dsSet, "customers");
dgvView.DataSource = dsSet.Tables["customers"];
}
void btnUpdate_Click(object sender, EventArgs e)
{
//设置值
dsSet.Tables["customers"].Rows[3]["contactName"] = "Thomas Hardy";
//更新数据(UpDate方法自动遍历DataTable中的行,以找出需要对数据库作出变动)
//Rows集合中每个DataRow对象都具有属性RowState,可以跟踪此行是否已删除、添加、修改,还是未作变动。所作的任何变化都会反映到数据库中。
sdaAdapter.Update(dsSet, "customers");
dgvView.DataSource = dsSet.Tables["customers"];
}
--------------------编程问答-------------------- 另外建议你的数据库最好要设定一下主键! --------------------编程问答-------------------- DaSql.Update()
是要你的DataTable的行状态为Added的时候才会去将数据insert到你的表里. --------------------编程问答--------------------
这是对的.这证明你的OracleCommandBuilder正确生成了insert的语句.在oracle中参数化的参数就是:xx这样的东西,同sql server中的@xx --------------------编程问答-------------------- 在DaSql.Update(dtTarget); 这行代码之前加入下面代码.你再运行你的程序看看
--------------------编程问答-------------------- DataRowState的几个状态:
foreach (DataRow dr in dtTarget.Rows)
{
dr.SetAdded();
}
Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。
Deleted 该行已通过 DataRow 的 Delete 方法被删除。
Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
Modified 该行已被修改,AcceptChanges 尚未调用。
Unchanged 该行自上次调用 AcceptChanges 以来尚未更改。
示例如下:
private void DemonstrateRowState() {
//Run a function to create a DataTable with one column.
DataTable myTable = MakeTable();
DataRow myRow;
// Create a new DataRow.
myRow = myTable.NewRow();
// Detached row.
Console.WriteLine("New Row " + myRow.RowState);
myTable.Rows.Add(myRow);
// New row.
Console.WriteLine("AddRow " + myRow.RowState);
myTable.AcceptChanges();
// Unchanged row.
Console.WriteLine("AcceptChanges " + myRow.RowState);
myRow["FirstName"] = "Scott";
// Modified row.
Console.WriteLine("Modified " + myRow.RowState);
myRow.Delete();
// Deleted row.
Console.WriteLine("Deleted " + myRow.RowState);
}
private DataTable MakeTable(){
// Make a 易做图 table with one column.
DataTable dt = new DataTable("myTable");
DataColumn dcFirstName = new DataColumn("FirstName", Type.GetType("System.String"));
dt.Columns.Add(dcFirstName);
return dt;
}
补充:.NET技术 , ASP.NET