前无古人后无来者史无前例错综复杂变幻莫测回肠荡气余码绕梁让读者看得三月不知肉味之究极错误代码~~!!各位长老速进~~

tylrr 2005-05-09 10:04:55
可以正常运行,却无法实现编辑功能的代码~~~~请帮忙看看`~谢谢~
我修改了dal_updatecmd (修改数据功能代码) 之后,代码可以正常运行,编译,显示页面.但是选择一行数据修改后,点击"修改"却无法修改数据.而且没有出错提示.本来是正常的,但我在sql语句中使用了参数之后就无法正常编辑信息了,而且没有出错提示.我使用的是Access数据库.需要测试代码数据库的长老请留下邮箱~~~
我已经问过很多大师,都无法解释这一超自然现象.麻烦各位长老帮我看看~~~谢谢 鞠躬~~~


这是程序代码段


<%@ Page Language="VB" Debug ="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">

Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not IsPostBack Then
binddatalist()
End If
End Sub


Sub binddatalist()
Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
Dim cmd As Data.OleDb.OleDbCommand = New Data.OleDb.OleDbCommand("select * from shop_sale", myconn)
myconn.Open()
Dim mydatareader As Data.OleDb.OleDbDataReader = cmd.ExecuteReader()
DataList1.DataSource = mydatareader
DataList1.DataBind()
mydatareader.Close()
myconn.Close()
End Sub

Sub dal_editcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)
DataList1.EditItemIndex = e.Item.ItemIndex
binddatalist()
End Sub

Sub dal_cancelcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)
DataList1.EditItemIndex = -1
binddatalist()
End Sub

Sub dal_delcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)

Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
Dim saleid As String = DataList1.DataKeys(e.Item.ItemIndex)
Dim cmd As Data.OleDb.OleDbCommand = New Data.OleDb.OleDbCommand("delete * from shop_sale where numsal_saleid=" + saleid, myconn)
myconn.Open()
cmd.ExecuteNonQuery()
myconn.Close()
DataList1.EditItemIndex = -1
binddatalist()

End Sub

Sub dal_updatecmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)

Dim saleid As String
dim sname As TextBox= e.Item.FindControl("sname")
dim sclass As TextBox= e.Item.FindControl("sclass")
Dim stype As TextBox= e.Item.FindControl("stype")
Dim soffer As TextBox= e.Item.FindControl("soffer")
Dim ssoffer As TextBox= e.Item.FindControl("ssoffer")
Dim samount As TextBox= e.Item.FindControl("samount")
Dim sleft As TextBox= e.Item.FindControl("sleft")
Dim sintro As TextBox= e.Item.FindControl("sintro")
Dim sphoto As TextBox= e.Item.FindControl("sphoto")
Dim sreview As TextBox= e.Item.FindControl("sreview")


saleid = DataList1.DataKeys(e.Item.ItemIndex)
Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
dim cmdstr as string = "update shop_sale set txtsal_name=@sname,txtsal_class=@sclass,txtsal_type=@stype,monsal_offer=@soffer,monsal_soffer=@ssoffer,numsal_amount=@samount,numsal_left=@sleft,remsal_intro=@sintro,remsal_review=@sreview,httsal_photo=@sphoto where numsal_saleid=@sid"
Dim updatecmd As Data.OleDb.OleDbCommand
updatecmd = New Data.OleDb.OleDbCommand ( cmdstr,myconn )
updatecmd.Parameters.Add("@sid", Data.OleDb.OleDbType.Char).Value = saleid
updatecmd.Parameters.Add("@sname", Data.OleDb.OleDbType.Char).Value = sname.Text
updatecmd.Parameters.Add("@stype", Data.OleDb.OleDbType.Char).Value = stype.Text
updatecmd.Parameters.Add("@sclass", Data.OleDb.OleDbType.Char).Value = sclass.Text
updatecmd.Parameters.Add("@soffer", Data.OleDb.OleDbType.Char).Value = soffer.Text
updatecmd.Parameters.Add("@ssoffer", Data.OleDb.OleDbType.Char).Value = ssoffer.Text
updatecmd.Parameters.Add("@samount", Data.OleDb.OleDbType.Char).Value = samount.Text
updatecmd.Parameters.Add("@sleft", Data.OleDb.OleDbType.Char).Value = sleft.Text
updatecmd.Parameters.Add("@sintro", Data.OleDb.OleDbType.Char).Value = sintro.Text
updatecmd.Parameters.Add("@sphoto", Data.OleDb.OleDbType.Char).Value = sphoto.Text
updatecmd.Parameters.Add("@sreview", Data.OleDb.OleDbType.Char).Value = sreview.Text

myconn.Open()
updatecmd.ExecuteNonQuery()
myconn.Close()
DataList1.EditItemIndex = -1
binddatalist()

End Sub

</script>

...全文
179 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tylrr 2005-05-10
  • 打赏
  • 举报
回复
哦~~~谢谢楼上各位长老~~~
小生已经找到问题症结所在.看这一段

dim cmdstr as string = "update shop_sale set txtsal_name=@sname,txtsal_class=@sclass,txtsal_type=@stype,monsal_offer=@soffer,monsal_soffer=@ssoffer,numsal_amount=@samount,numsal_left=@sleft,remsal_intro=@sintro,remsal_review=@sreview,httsal_photo=@sphoto where numsal_saleid=@sid"

@sid 是saleid的参数
我把where numsal_saleid=@sid" 改成 where numsal_saleid="+saleid 这样就行了
不使用 @sid 参数传递值而直接用saleid就正常了.
不过我还是不知道为什么不能用@sid这个参数.请教各位长老`~~~~
viyo 2005-05-10
  • 打赏
  • 举报
回复
up!
liangfengxx 2005-05-10
  • 打赏
  • 举报
回复
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="editGrid.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 80px; POSITION: absolute; TOP: 56px" runat="server"
Width="768px" Height="240px" AllowPaging="True" AutoGenerateColumns="False" BorderColor="#0099CC"
BorderWidth="2px" CellPadding="2" AllowSorting="True" PageSize="3" OnPageIndexChanged="DataGrid1_PageIndexChanged"
OnUpdateCommand="DataGrid1_UpdateCommand" OnCancelCommand="DataGrid1_CancelCommand" OnEditCommand="DataGrid1_EditCommand"
OnDeleteCommand="DataGrid1_DeleteCommand" OnSortCommand="DataGrid1_SortCommand" DataKeyField="studentid">
<AlternatingItemStyle HorizontalAlign="Center" BackColor="#99CCFF"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderStyle HorizontalAlign="Center" BackColor="LightSteelBlue"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="studentid" SortExpression="studentid" ReadOnly="True" HeaderText="学 号"></asp:BoundColumn>
<asp:BoundColumn DataField="name" SortExpression="name" ReadOnly="True" HeaderText="姓 名"></asp:BoundColumn>
<asp:BoundColumn DataField="age" SortExpression="age" HeaderText="年 龄"></asp:BoundColumn>
<asp:BoundColumn DataField="address" SortExpression="address" HeaderText="地 址"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="照 片">
<ItemTemplate>
<asp:Image ID="photoImg" Runat="server" ImageUrl='<%#Container.dataItem("photo")%>'>
</asp:Image>
</ItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="操 作" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn Text="删除" ButtonType="PushButton" HeaderText="删 除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
<PagerStyle NextPageText="下一页" Font-Italic="True" PrevPageText="上一页" HorizontalAlign="Center"
ForeColor="Blue" BackColor="White"></PagerStyle>
</asp:datagrid></form>
</body>
</HTML>

-------------------------------------------------------------------------------
数据库就自己建了,就那么几个字段,适当修改数据库的连接字符串就可以运行的
liangfengxx 2005-05-10
  • 打赏
  • 举报
回复
给你一个现成的:VB.NET版(.VB文件)
--------------------------------------------------------------
Imports System.Data
Imports System.Data.SqlClient
Public Class WebForm1
Inherits System.Web.UI.Page

#Region " Web 窗体设计器生成的代码 "

'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents Repeater1 As System.Web.UI.WebControls.Repeater

'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub

#End Region

Public Sub bindGrid(ByVal s As String)
Dim sqlConn As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
Dim ds As New DataSet
Dim dt As DataTable
Dim dv As DataView
sqlConn.Open()
Dim sqlAdapter As New SqlDataAdapter("select * from student", sqlConn)
sqlAdapter.Fill(ds, "tabStudent")
dt = ds.Tables("tabStudent")
dv = New DataView(dt)
dv.Sort = s
Me.DataGrid1.DataSource = dv
Me.DataGrid1.DataBind()
sqlConn.Close()
sqlConn = Nothing
End Sub

Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not Page.IsPostBack Then
bindGrid("")
End If
End Sub

'实现翻页
Public Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
Me.DataGrid1.CurrentPageIndex = e.NewPageIndex
bindGrid("")
End Sub

'编辑
Public Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
Me.DataGrid1.EditItemIndex = e.Item.ItemIndex
bindGrid("")
End Sub

'取消编辑
Public Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
Me.DataGrid1.EditItemIndex = -1
bindGrid("")
End Sub

'更新数据
Public Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
Dim strId, strSql, address As String
Dim age As Integer
Dim intRow As Integer
Dim obj1, obj2 As TextBox
intRow = e.Item.ItemIndex
obj1 = Me.DataGrid1.Items(intRow).Cells(3).Controls(0)
obj2 = Me.DataGrid1.Items(intRow).Cells(2).Controls(0)
address = obj1.Text
age = CInt(obj2.Text)
strId = Me.DataGrid1.DataKeys.Item(intRow)
strSql = "update student set address='" & address & "',age='" & age & "' where studentid='" & strId & "'"
Dim sqlCon As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
sqlCon.Open()
Dim sqlCmd As New SqlCommand
sqlCmd.CommandText = strSql
sqlCmd.Connection = sqlCon
sqlCmd.ExecuteNonQuery()
sqlCon.Close()
sqlCon = Nothing
Me.DataGrid1.EditItemIndex = -1
bindGrid("")
End Sub

'删除数据
Public Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand
Dim stuId, sqlStr As String
Dim currentRow As Integer
currentRow = e.Item.ItemIndex
stuId = Me.DataGrid1.DataKeys.Item(currentRow)
sqlStr = "delete from student where studentid='" & stuId & "'"
Dim sqlCon As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
sqlCon.Open()
Dim sqlCmd As New SqlCommand
sqlCmd.CommandText = sqlStr
sqlCmd.Connection = sqlCon
sqlCmd.ExecuteNonQuery()
sqlCon.Close()
sqlCon = Nothing
Me.DataGrid1.EditItemIndex = -1
bindGrid("")
End Sub

'进行排序
Public Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DataGrid1.SortCommand
Dim title As String
title = e.SortExpression.ToString
bindGrid(title)
End Sub
End Class
  • 打赏
  • 举报
回复
updatecmd.Parameters.Add("@sid", Data.OleDb.OleDbType.Char).Value=.....

长度是多少?
minghui000 2005-05-10
  • 打赏
  • 举报
回复
up
io8 2005-05-10
  • 打赏
  • 举报
回复
@sid 是在 数据库里用的
在 .net 里 传值 就该用 '"+参数名+"' C# 的写法
TopFans 2005-05-10
  • 打赏
  • 举报
回复
调试下就知道了。。老弟。。
tylrr 2005-05-09
  • 打赏
  • 举报
回复
好像是参数的问题`~~`
chongachong 2005-05-09
  • 打赏
  • 举报
回复
C#:

TextBox sname=(TextBox)e.Item.FindControl["sname"];

//FindControl方法返回的是object对象,要转化一下的
tylrr 2005-05-09
  • 打赏
  • 举报
回复
<ASP.NET 技术内幕>里就是这种写法的啊,我以前用过没事啊.无毒副作用~~常用还可以强身健体~~

dim sname As TextBox= e.Item.FindControl("sname")
hchxxzx 2005-05-09
  • 打赏
  • 举报
回复
很奇怪啊,你上面这样的写法居然能通过?
dim sname As TextBox= e.Item.FindControl("sname")

应为如下:
dim sname As TextBox= Ctype(e.Item.FindControl("sname"),TextBox)

检查你的事件有没有丢失.
tylrr 2005-05-09
  • 打赏
  • 举报
回复
接上,这是html 代码段


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID=lab_wrong runat=server></asp:Label>

<asp:DataList ID="DataList1" CellPadding="4" ForeColor="#333333" DataKeyField="numsal_saleid" OnEditCommand="dal_editcmd"
OnDeleteCommand ="dal_delcmd" OnCancelCommand ="dal_cancelcmd" OnUpdateCommand ="dal_updatecmd" EditItemStyle-BackColor="DeepSkyBlue" runat=server>
<ItemTemplate >
商品ID <%#Container.DataItem("numsal_saleid")%> <br />
商品名称 <%#Container.DataItem("txtsal_name")%> <br />
<asp:LinkButton ID =edit1 runat =server Text ="编辑商品资料" CommandName ="edit"></asp:LinkButton>
</ItemTemplate>
 
<EditItemTemplate >

商品名称 <asp:TextBox ID=sname runat =server Text='<%#container.dataitem("txtsal_name")%> ' ></asp:TextBox><br />
品牌 <asp:TextBox ID=stype runat =server Text='<%#container.dataitem("txtsal_type")%>' ></asp:TextBox><br />
类别 <asp:TextBox ID=sclass runat=server Text='<%#container.dataitem("txtsal_class")%> '></asp:TextBox><br />
定价 <asp:TextBox ID=soffer runat =server Text='<%#container.dataitem("monsal_offer")%> ' ></asp:TextBox><br />
特价 <asp:TextBox ID=ssoffer runat =server Text='<%#container.dataitem("monsal_soffer")%>' ></asp:TextBox><br />
入货数量 <asp:TextBox ID=samount runat=server Text='<%#container.dataitem("numsal_amount")%> '></asp:TextBox><br />
剩下 <asp:TextBox ID=sleft runat =server Text='<%#container.dataitem("numsal_left")%> ' ></asp:TextBox><br />
商品介绍 <asp:TextBox ID=sintro runat =server Text='<%#container.dataitem("remsal_intro")%>' ></asp:TextBox><br />
图片 <asp:TextBox ID=sphoto runat=server Text='<%#container.dataitem("httsal_photo")%> '></asp:TextBox><br />
用户评价 <asp:TextBox ID=sreview runat =server Text='<%#container.dataitem("remsal_review")%> ' TextMode=MultiLine ></asp:TextBox><br />

<asp:LinkButton ID=linb_update CommandName ="update" Text ="修改" runat =server></asp:LinkButton>
<asp:LinkButton ID=linb_del CommandName ="delete" Text="删除" runat =server ></asp:LinkButton>
<asp:LinkButton ID=linb_cancel CommandName ="cancel" Text ="取消" runat=server ></asp:LinkButton>

</EditItemTemplate>

<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<AlternatingItemStyle BackColor="GhostWhite" />
<ItemStyle BackColor="#EFF3FB" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
</asp:DataList></div>
</form>
</body>
</html>

62,046

社区成员

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

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

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

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