datagrid 中函数的问题

flyingxfxf 2004-04-16 08:55:22
我用的是 access数据库
页面中一个 DataGrid 要删除其中一行值
删除函数为:

public void dagPro_Delet(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string deleteCmd="DELETE from project WHERE projectID=@id";
OleDbCommand myCommand = new OleDbCommand(deleteCmd,conn);
myCommand.Parameters.Add(new OleDbParameter("@id",OleDbType.VarChar,11));
myCommand.Parameters["@id"].Value = dagPro.DataKeys[(int)e.Item.ItemIndex];

myCommand.Connection.Open();

try
{
myCommand.ExecuteNonQuery();
Label2.Text ="以删除一个项目记录";
}
catch(OleDbException)
{
Label2.Text ="删除失败";
}
myCommand.Connection.Close();

BindGrid();



}

这里调用的是存储过程么?ACCESS数据库不能调用存储过程吧,在页面中点 “删除”的时候出错:

索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index

源错误:


行 138: OleDbCommand myCommand = new OleDbCommand(deleteCmd,conn);
行 139: myCommand.Parameters.Add(new OleDbParameter("@id",OleDbType.VarChar,11));
行 140: myCommand.Parameters["@id"].Value = dagPro.DataKeys[(int)e.Item.ItemIndex];
行 141:
行 142: myCommand.Connection.Open();


...全文
48 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingxfxf 2004-04-16
  • 打赏
  • 举报
回复
这样改有用么?
好象没吧。
yanransoft 2004-04-16
  • 打赏
  • 举报
回复
a sample from MSDN:

public void CreateOleDbParamColl(OleDbConnection myConn) {
OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Customers WHERE CustomerID = ?", myConn);
OleDbParameterCollection myParamCollection = myCommand.Parameters;
OleDbParameter myNewParameter = myParamCollection.Add("CustomerID", OleDbType.VarChar, 5, "CustomerID");
}
flyingxfxf 2004-04-16
  • 打赏
  • 举报
回复
projectID=@id
改为projectID=?
??怎么改?后面的参数怎么搞?
flyingxfxf 2004-04-16
  • 打赏
  • 举报
回复
按 jpusaddam(孤独客) 的做了还是错的。
按 coldice(ice) 的也不行啊。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index
比如要删除数据库中字段projectID为值1的那行数据,是不是dagPro.DataKeys[e.Item.ItemIndex]中的值没的到啊?
谁可以解释下 dagPro.DataKeys[e.Item.ItemIndex];的意思么?
yanransoft 2004-04-16
  • 打赏
  • 举报
回复
projectID=@id
改为projectID=?
yanransoft 2004-04-16
  • 打赏
  • 举报
回复
access有存储过程,但是以“查询”的方式存储在accsss文件中的。
flyingxfxf 2004-04-16
  • 打赏
  • 举报
回复
不行啊。smx717616(学) 写的有问题
coldice 2004-04-16
  • 打赏
  • 举报
回复
不是存储过程,参数化SQL语句而已。。。识别是否存储过程最简单的方法就是看是否有SqlCommand.CommanddType=CommanddType.StoredProcedure。

myCommand.Parameters["@id"].Value = (int)dagPro.DataKeys[e.Item.ItemIndex];


jpusaddam 2004-04-16
  • 打赏
  • 举报
回复
你是不是用了分页地呀?!我刚开始也碰倒过,因为你删除以后的pagecout值-1了,而你的CURRENTPAGE值没变! 导致的
smx717616 2004-04-16
  • 打赏
  • 举报
回复
string deleteCmd="DELETE from project WHERE projectID=@id";
这句不对
projectID=@id";
写成 "'" & @id & "'"

62,074

社区成员

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

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

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

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