您可以通过这种方式向 Oracle 引擎发送直接更新语句。
using (OracleConnection cnn = new OracleConnection(connString))
using (OracleCommand cmd = new OracleCommand("UPDATE TABLE1 SET BIRHDATE=:NewDate WHERE ID=:ID", cnn))
{
cmd.Parameters.AddWithValue(":NewDate", YourDateTimeValue);
cmd.Parameters.AddWithValue(":ID", 111);
cnn.Open();
cmd.ExecuteNonQuery();
}
编辑:
如果您不知道哪些字段已更改(并且不想使用 ORM 工具),那么您需要保留最初用于填充字段的原始 DataSource(数据表、数据集?)。然后更新相关行并使用 OracleDataAdapter。
using(OracleConnection cnn = new OracleConnection(connString))
using (OracleCommand cmd = new OracleCommand("SELECT * FROM TABLE1 WHERE 1=0", cnn))
{
OracleAdapter adp = new OracleDataAdapter();
adp.SelectCommand = cmd;
// The OracleDataAdapter will build the required string for the update command
// and will act on the rows inside the datatable who have the
// RowState = RowState.Changed Or Inserted Or Deleted
adp.Update(yourDataTable);
}
请记住,这种方法效率低下,因为它需要两次访问数据库。第一个发现您的表结构,第二个更新更改的行。此外,为了让 OracleDataAdapter 准备所需的 UpdateCommand/InsertCommand/DeleteCommand,它需要表中的主键。
相反,如果您有很多行要更新,这很方便。
最后一种选择(可能是最快的)是 StoredProcedure,但在这种情况下,您需要回到我的第一个示例并调整 OracleCommand 以使用 StoredProcedure,(将所有字段添加为参数,将 CommandType 更改为 CommandType.StoredProcedure 并更改命令的文本是 StoredProcedure 的名称)。然后 StoredProcedure 将选择需要更新哪些字段。