OracleDataAdapter的设置错误,现在不能实现删除,请看我这段代码有什么问题...急,在线等

dahaig 2006-08-03 09:07:32
public static OracleDataAdapter CreateCustomerAdapter(OracleConnection conn)
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd;
OracleParameter parm1;
OracleParameter parm2;
OracleParameter parm3;

// Create the SelectCommand.

cmd = new OracleCommand("select * from tn_t_2M_perf_valve", conn);

da.SelectCommand = cmd;


// Create the UpdateCommand.

cmd = new OracleCommand("UPDATE tn_t_2M_perf_valve SET PURPOSE = :p1, PROTOCOLLEVEL = :p2, PARAMETERINEN = :p3, PARAMETERINCN = :p4, PARAMETEROPERATOR = :p5, PERF_VALUE = :p6, PERF_UNIT = :p7, ALARMLEVEL = :p8" +
" WHERE PURPOSE = :p1old AND PROTOCOLLEVEL = :p2old AND PARAMETERINEN = :p3old" , conn);

cmd.Parameters.Add("p1", OracleType.VarChar, 12, "PURPOSE");
cmd.Parameters.Add("p2", OracleType.Number, 2, "PROTOCOLLEVEL");
cmd.Parameters.Add("p3", OracleType.VarChar, 40, "PARAMETERINEN");
cmd.Parameters.Add("p4", OracleType.VarChar, 40, "PARAMETERINCN");
cmd.Parameters.Add("p5", OracleType.VarChar, 3, "PARAMETEROPERATOR");
cmd.Parameters.Add("p6", OracleType.Number, 2, "PERF_VALUE");
cmd.Parameters.Add("p7", OracleType.VarChar, 10, "PERF_UNIT");
cmd.Parameters.Add("p8", OracleType.VarChar, 10, "ALARMLEVEL");

parm1 = cmd.Parameters.Add("p1old", OracleType.VarChar, 12, "PURPOSE");
parm1.SourceVersion = DataRowVersion.Original;
parm2 = cmd.Parameters.Add("p2old", OracleType.Number, 2, "PROTOCOLLEVEL");
parm2.SourceVersion = DataRowVersion.Original;
parm3 = cmd.Parameters.Add("p3old", OracleType.VarChar, 40, "PARAMETERINEN");
parm3.SourceVersion = DataRowVersion.Original;

da.UpdateCommand = cmd;

// Create the DeleteCommand.

cmd = new OracleCommand("DELETE tn_t_2M_perf_valve " +" WHERE PURPOSE = :p1old AND PROTOCOLLEVEL = :p2old AND PARAMETERINEN = :p3old", conn);

parm1 = cmd.Parameters.Add("p1old", OracleType.VarChar, 12, "PURPOSE");
parm1.SourceVersion = DataRowVersion.Original;
parm2 = cmd.Parameters.Add("p2old", OracleType.Number, 2, "PROTOCOLLEVEL");
parm2.SourceVersion = DataRowVersion.Original;
parm3 = cmd.Parameters.Add("p3old", OracleType.VarChar, 40, "PARAMETERINEN");
parm3.SourceVersion = DataRowVersion.Original;

da.DeleteCommand = cmd;

return da;
}
编译通过,运行也正常,就是不能实现删除
测试代码如下
OracleConnection conn = new OracleConnection(connectionString);
OracleDataAdapter adapter = CreateCustomerAdapter( conn );

adapter.Fill(m_dt);

m_dt.Rows.RemoveAt(2);
int n = m_dt.Rows.Count;
try
{
adapter.Update(m_dt);
}
catch( OracleException ex )
{
MessageBox.Show(ex.Message);
}

m_dt.Clear();
adapter.Fill(m_dt);
if( m_dt.Rows.Count == n )
MessageBox.Show("success!");
else
MessageBox.Show("fail!");
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaig 2006-08-03
  • 打赏
  • 举报
回复
简直了Knight94,我爱你...哈哈哈哈
Knight94 2006-08-03
  • 打赏
  • 举报
回复
to m_dt.Rows.RemoveAt(2);

从集合里删除一条记录,操作后记录已经不在集合中存在。用DataAdapter.update不会对数据库有任何操作。


to m_dt.Rows[2].Delete();

标明记录状态为删除,记录还在此集合中。这样DataAdapter.update操作才有效。
牛人 2006-08-03
  • 打赏
  • 举报
回复
只是在内存表里进行了删除,并没有提交到数据库。

对m_dt中状态为删除的记录。提交到数据库,进行删除!
Knight94 2006-08-03
  • 打赏
  • 举报
回复
你删除记录的方法错了,把
m_dt.Rows.RemoveAt(2);

改成
m_dt.Rows[2].Delete();
需要.net4平台,引用之后,访问工具类示例: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Security.Cryptography; using System.IO; using Oracle.ManagedDataAccess.Client; namespace DBconnection { public class DBHelper { /// /// 读取数据库连接 /// public static readonly string OracleConnectionStr = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.9.211)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=HIS)));Persist Security Info=True;User ID=ZLHIS;Password=o15ntu;"; /// /// 集合查询:在此完成所有的集合类型查询 /// /// 查询语句 /// 结果集合 public static DataSet OracleFillTable(string sqlQuery) { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { //创建数据适配器,将查询语句及连接字符串两个参数传进数据适配器 con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = sqlQuery; //新建一个表格对象dt,用来获取查询的数据 DataSet ds = new DataSet(); try { //填充表格 OracleDataAdapter oda = new OracleDataAdapter(cmd); oda.Fill(ds); //如果查询无误,则返回查询出的数据 return ds; } catch { //执行查询出现错误,返回null值 return null; } finally { //主动销毁所用的资源 ds.Dispose(); cmd.Dispose(); // 关闭连接 con.Close(); } } } /// /// 集合查询:在此完成所有的集合类型查询 /// /// 查询语句 /// 结果集合 public static string OracleGetTable(string sqlQuery) { string result = null; try { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { OracleCommand cmd = con.CreateCommand(); try { con.Open(); cmd.CommandText = sqlQuery; try { //执行sql语句 result = cmd.ExecuteScalar().ToString(); } catch { result = "-1"; } } catch (Exception e) { throw new Exception("数据库连接出现错误!"); } finally { //主动销毁资源 cmd.Dispose(); // 关闭连接 con.Close(); } } } catch (Exception e) { // MessageBox.Show(e.ToString()); } return result; } } }

110,500

社区成员

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

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

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