求解一个DeleteCommand为什么不能删除数据

pupstar 2012-09-13 01:18:50
如题上代码:


using (OracleDataAdapter da = new OracleDataAdapter())
{
try
{
string strSQL="Select * from t1";
OpenConn();//打开连接
OracleCommand cmd;
OracleParameter parm;
DataTable dt = new DataTable();
cmd = new OracleCommand(strSQL, conn);
da.SelectCommand = cmd;
da.Fill(dt);
string delsql = "DELETE FROM t1 WHERE ID=:pID";
cmd = new OracleCommand(delsql, conn);
parm = cmd.Parameters.Add(":pID", OracleType.VarChar, 50, "ID");
parm.SourceVersion = DataRowVersion.Original;
da.DeleteCommand = cmd;
// int a = da.Update(dt);
}
catch (Exception ex)
{
//省略
}
}


以上代码不能删除对应的数据库里的记录,请高手指点。
...全文
208 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pupstar 2012-09-13
  • 打赏
  • 举报
回复
已经搞定,下面是代码:

OpenConn();
OracleCommand cmd;
OracleParameter parm;
DataTable dt = new DataTable();
DataTable dt0 = new DataTable();
cmd = new OracleCommand(strSQL, conn);
da.SelectCommand = cmd;
da.Fill(dt);
dt0 = dt.Copy(); //复制此表便于其他操作,否则所有行都为空。
foreach (DataRow dr in dt.Rows)
{
dr.Delete();
}
string delsql = "DELETE FROM CMPP_SUBMIT WHERE ID=:pID";
cmd = new OracleCommand(delsql, conn);
parm = cmd.Parameters.Add(":pID", OracleType.VarChar, 50, "ID");
parm.SourceVersion = DataRowVersion.Original;
da.DeleteCommand = cmd;
da.Update(dt);


  • 打赏
  • 举报
回复
oracle中参数本身就是: 上面是没有问题的

真正的问题在于,你所填充的DataTable 是没有任何更新的,因此是不会最终执行删除操作的

因此在da.Update(dt); 之前你要保证你的DataTable 是有删除操作的

如下
adapter.Fill(dt);
dt.Rows[1].Delete();//删除DataTable中的某一行,根据需要自行删除
adapter.DeleteCommand = com;
adapter.Update(dt);

luquansen 2012-09-13
  • 打赏
  • 举报
回复
好像Delphi中可以用“:”
dahaizhiliang 2012-09-13
  • 打赏
  • 举报
回复
我还以为oracle与sqlserver的占位符不一样呢。没用过oracle,我想也是这个问题
王子文龙 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
sql中的参数 不是冒号,是 @pid
[/Quote]
这个占位符还有讲究?
bdmh 2012-09-13
  • 打赏
  • 举报
回复
sql中的参数 不是冒号,是 @pid
pupstar 2012-09-13
  • 打赏
  • 举报
回复
补充一下,我是要把取出来的数据批量删掉,

下面是msdn上的代码,已证实不能实现了。

public static OracleDataAdapter CreateCustomerAdapter(OracleConnection conn)
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd;
OracleParameter parm;

// Create the SelectCommand.

cmd = new OracleCommand("SELECT * FROM Dept " +
"WHERE DName = :pDName AND Loc = :pLoc", conn);

cmd.Parameters.Add("pDName", OracleType.NVarChar, 14);
cmd.Parameters.Add("pLoc", OracleType.NVarChar, 13);

da.SelectCommand = cmd;

// Create the DeleteCommand.

cmd = new OracleCommand("DELETE FROM Dept WHERE DeptNo = :pDeptNo", conn);

parm = cmd.Parameters.Add("pDeptNo", OracleType.Number, 2, "DeptNo");
parm.SourceVersion = DataRowVersion.Original;

da.DeleteCommand = cmd;

return da;
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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