各位大虾帮看一下,更新Access数据库记录的问题。。。。
各位大虾帮看一下,更新Access数据库记录的问题。。。。
值也传的过去,可就是更新不了纪录,
它也不显示任何出错信息。。。。。。。!!!
郁闷阿,
SOS!!!
void update1(object sender,DataListCommandEventArgs e)
{
string connstr="provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("my.mdb");
OleDbConnection conn=new OleDbConnection(connstr);
string updateComm="update class set class_name=@class_name,class_about=@class_about where class_id=@class_id";
OleDbCommand comm=new OleDbCommand(updateComm,conn);
comm.Parameters.Add("@class_id",OleDbType.VarChar,10).Value=((Label)e.Item.FindControl("class_id_u")).Text;
comm.Parameters.Add("@class_name",OleDbType.VarChar,10).Value=((TextBox)e.Item.FindControl("edit_class_name")).Text;
comm.Parameters.Add("@class_about",OleDbType.WChar).Value=((TextBox)e.Item.FindControl("edit_class_about")).Text;
conn.Open();
try
{
//Response.Write(((TextBox)e.Item.FindControl("edit_class_name")).Text); 可以获得值。。
comm.ExecuteNonQuery();
conn.Close();
class0.EditItemIndex=-1;
BindGrid();
}
catch(System.Data.OleDb.OleDbException E)
{
Message.Text=E.ToString(); // 不显示任何错误信息。
}
}
</script>
<asp:Label ID="Message" runat="server" ForeColor="#FF0000" Font-Size="14"></asp:Label>
<asp:DataList ID="class0" runat="server"
AutoGenerateColumns="false"
OnUpdateCommand="update1"
OnEditCommand="edit1"
OnDeleteCommand="delete1"
OnCancelCommand="cancel1">
<headertemplate>
<table cellpadding="2" cellspacing="2"><tr bgcolor="#F4F8FE">
<td>类名</td>
<td>修改</td>
<td>删除</td>
</tr>
</headertemplate>
<itemtemplate>
<tr bgcolor="#F2F2F2">
<td><%# DataBinder.Eval(Container.DataItem,"class_name")%></td>
<td>
<asp:LinkButton runat="server" Text="修改" CommandName="edit"></asp:LinkButton>
</td>
<td>
<asp:LinkButton runat="server" Text="删除" CommandName="delete"></asp:LinkButton>
<asp:Label ID="class_id_d" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem,"class_id")%>'></asp:Label>
</td>
</tr>
</itemtemplate>
<edititemtemplate>
<tr><td colspan="3">
<table bgcolor="#F4F8FE">
<tr>
<td>
<asp:Label ID="class_id_u" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem,"class_id")%>'></asp:Label>
</td></tr>
<tr>
<td align="center">
<asp:TextBox ID="edit_class_name"
Columns="12" MaxLength="10" TextMode="SingleLine"
runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"class_name")%>'></asp:TextBox>
<asp:RequiredFieldValidator ControlToValidate="edit_class_name" runat="server"
ErrorMessage="*"></asp:RequiredFieldValidator>
<asp:LinkButton runat="server" Text="保存" CommandName="update"></asp:LinkButton>
<asp:LinkButton runat="server" Text="放弃" CommandName="cancel"></asp:LinkButton>
</td></tr>
<tr><td align="center">
<asp:TextBox TextMode="MultiLine" ID="edit_class_about" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem,"class_about")%>' Rows="5" Columns="22" MaxLength="250"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ErrorMessage="*"
ControlToValidate="edit_class_about"></asp:RequiredFieldValidator>
</td></tr>
</table>
</td></tr>
</edititemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:DataList>
问题点数:20、回复次数:20Top
1 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-04-02 22:14:00 得分 10
Message.Text=E.Exception
是获得错误的。
我估计哄,估计你没有把拌定数据写在!IsPostBack事件中导致的。
我想你拌定数据库是写在page_load对吧,那么现在你应该在page_load加入
if(!IsPostBack)
{
//..这里加拌定数据的代码
}Top
2 楼eyych(2006)回复于 2005-04-02 22:44:55 得分 0
不行啊,
我就是这样写的阿。
在线等。。。Top
3 楼tophifi(黑字先生)回复于 2005-04-02 23:13:02 得分 5
class是不是access的保留字啊,加上[]试试呢Top
4 楼eyych(2006)回复于 2005-04-02 23:22:36 得分 0
还是不行啊,
没反应。。。。。
Help!!!Top
5 楼Jefflove(白马)回复于 2005-04-02 23:26:10 得分 0
你所有的FindControl中的项都能获得值么?Top
6 楼tophifi(黑字先生)回复于 2005-04-02 23:26:18 得分 0
点击了没反应???页面没提交???
不会button和事件的关联掉了吧Top
7 楼eyych(2006)回复于 2005-04-02 23:52:58 得分 0
FindControl中的项都能获得值,测试过了。。
对,页面没反应,但关联没错啊,都是"update1"Top
8 楼tophifi(黑字先生)回复于 2005-04-03 00:07:17 得分 0
到页面设计界面双击button再重新关联一次就行了Top
9 楼eyych(2006)回复于 2005-04-03 00:36:24 得分 0
还是不行,,,,,
好像不是那的问题Top
10 楼tophifi(黑字先生)回复于 2005-04-03 02:01:28 得分 0
难道有数据验证控件?Top
11 楼cqcya()回复于 2005-04-03 09:57:44 得分 0
检查你的数据库是否有写权限Top
12 楼vrace(Warcraft III in 1.20)回复于 2005-04-03 11:08:22 得分 5
把 conn.Open(); 写在 OleDbCommand comm=new OleDbCommand(updateComm,conn); 前面试试。Top
13 楼chenyun_424(求教的人)回复于 2005-04-03 11:36:01 得分 0
upTop
14 楼eyych(2006)回复于 2005-04-03 18:18:00 得分 0
还是不行啊,办法都试过了,
检查了一遍又一遍。。。
那位还有高招??赐教,赐教。。。
Top
15 楼eyych(2006)回复于 2005-04-03 20:23:05 得分 0
!Top
16 楼eyych(2006)回复于 2005-04-04 14:18:57 得分 0
up!Top
17 楼selim152(麦麦)回复于 2005-04-05 09:44:34 得分 0
检查一下你的窗体代码Top
18 楼eyych(2006)回复于 2005-04-05 21:19:44 得分 0
窗体代码没问题啊,一一对应。。
why?????????????
Top
19 楼eyych(2006)回复于 2005-04-05 22:04:36 得分 0
!Top
20 楼eyych(2006)回复于 2005-04-18 00:13:52 得分 0
反复检查:
1、Access数据库权限完整。
2、函数名、各标签id都对。
3、直接输出:
Response.Write(((TextBox)e.Item.FindControl("edit_class_name")).Text);
等,可以获得值。
4、但,就是更新的时候:
string updateComm="update class set class_name=@class_name,class_about=@class_about where class_id=@class_id";
值就不知道跑哪去了,就是获得不了。。。
5、将
string updateComm="update class set class_name=@class_name,class_about=@class_about where class_id=@class_id";
直接改为:
string updateComm="update class set class_name='mmm',class_about='nnn' where class_id=@class_id";
是可以更新纪录的。。。
6、也不显示任何错误。。。
why???????????????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
烦死我了,如果解决不了,我再也不用这破datagrid更新了!!!!!!!!
Top




