今天写了一个小代码段暖暖手! 遇到一个奇怪的问题! 第一次用的vs2008+Access2003
代码很简单 添加和删除功能!一个表Test 字段 ID 自增,UserName,Age 就三个字段!新建一个网站,在Default.aspx页面 <div>
<span><asp:Label ID="lblName" runat="server" Text="姓名"> </asp:Label></span>
<span><asp:TextBox ID="txtName" runat="server" Text=""></asp:TextBox></span>
<span><asp:Label ID="lblAge" runat="server" Text="年龄"> </asp:Label></span>
<span><asp:TextBox ID="txtAge" runat="server" Text=""></asp:TextBox></span>
<span><asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" /></span></div>
<div>
内容显示</div>
<div>
<asp:Repeater runat="server" ID="repeater1">
<HeaderTemplate>
<table border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse">
<tr>
<td style="width: 100px" align="center">
序号
</td>
<td style="width: 100px" align="center">
姓名
</td>
<td style="width: 100px" align="center">
年龄
</td>
<td style="width: 100px" align="center">
操作
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Container.ItemIndex+1 %>
</td>
<td>
<%# Eval("UserName") %>
</td>
<td>
<%# Eval("Age") %>
</td>
<td>
<asp:LinkButton ID="lkdel" runat="server" CommandArgument='<%# Eval("id") %>' OnClick="lkdel_click">Delete</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></FooterTemplate>
</asp:Repeater>
</div>cs 代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
}
} /// <summary>
/// 获取连接
/// </summary>
/// <returns></returns>
private OleDbConnection GetCon()
{
OleDbConnection sqlcon = new OleDbConnection();
sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
if (sqlcon.State == ConnectionState.Closed) { sqlcon.Open(); }
return sqlcon;
} /// <summary>
/// 插叙命令
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns></returns>
private DataTable GetCmdResult(string strSql)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
/// <summary>
/// 查询命令
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="param">参数</param>
/// <returns></returns>
private DataTable GetCmdResult(string strSql, OleDbParameter[] param)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
foreach (OleDbParameter sp in param)
{
cmd.Parameters.AddWithValue(sp.ParameterName, sp.Value);
}
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
} private int InsertData(string strSql, OleDbParameter[] param)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
foreach (OleDbParameter sp in param)
{
cmd.Parameters.AddWithValue(sp.ParameterName, sp.Value);
}
return cmd.ExecuteNonQuery();
}
} protected void btnSave_Click(object sender, EventArgs e)
{
string strSql = "insert into UserInfo(UserName,Age) values(@name,@age)";
if (txtAge.Text.Trim().Length == 0 || txtName.Text.Trim().Length == 0) return;
InsertData(strSql, new OleDbParameter[] { new OleDbParameter("@name", txtName.Text.Trim()), new OleDbParameter("@age", txtAge.Text.Trim()) }).ToString(); repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
} protected void lkdel_click(object sender, EventArgs e)
{ LinkButton lb = sender as LinkButton;
string parm = lb.CommandArgument;
string strSql = "delete from UserInfo where id=@id";
InsertData(strSql, new OleDbParameter[] { new OleDbParameter("@id", parm) }).ToString();
repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
}问题是 当我第一次点击 save 按钮之后,repeater里面的数据没有变化,但是表里已经有了!之后每次显示的都是上一次的数据!删除也是这样子的! 但是加断点调试之后就是正常的!不是调试模式下就不正常。
后来试了一下。Access2007也是这样的! 但是用sql server就没有这个问题,都是正常的!
这具体是什么问题啊!麻烦各位大牛们教一下小弟! 小弟学习asp.net 不久!想弄清楚问题在哪里!
代码很简单 添加和删除功能!一个表Test 字段 ID 自增,UserName,Age 就三个字段!新建一个网站,在Default.aspx页面 <div>
<span><asp:Label ID="lblName" runat="server" Text="姓名"> </asp:Label></span>
<span><asp:TextBox ID="txtName" runat="server" Text=""></asp:TextBox></span>
<span><asp:Label ID="lblAge" runat="server" Text="年龄"> </asp:Label></span>
<span><asp:TextBox ID="txtAge" runat="server" Text=""></asp:TextBox></span>
<span><asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" /></span></div>
<div>
内容显示</div>
<div>
<asp:Repeater runat="server" ID="repeater1">
<HeaderTemplate>
<table border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse">
<tr>
<td style="width: 100px" align="center">
序号
</td>
<td style="width: 100px" align="center">
姓名
</td>
<td style="width: 100px" align="center">
年龄
</td>
<td style="width: 100px" align="center">
操作
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Container.ItemIndex+1 %>
</td>
<td>
<%# Eval("UserName") %>
</td>
<td>
<%# Eval("Age") %>
</td>
<td>
<asp:LinkButton ID="lkdel" runat="server" CommandArgument='<%# Eval("id") %>' OnClick="lkdel_click">Delete</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></FooterTemplate>
</asp:Repeater>
</div>cs 代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
}
} /// <summary>
/// 获取连接
/// </summary>
/// <returns></returns>
private OleDbConnection GetCon()
{
OleDbConnection sqlcon = new OleDbConnection();
sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
if (sqlcon.State == ConnectionState.Closed) { sqlcon.Open(); }
return sqlcon;
} /// <summary>
/// 插叙命令
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns></returns>
private DataTable GetCmdResult(string strSql)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
/// <summary>
/// 查询命令
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="param">参数</param>
/// <returns></returns>
private DataTable GetCmdResult(string strSql, OleDbParameter[] param)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
foreach (OleDbParameter sp in param)
{
cmd.Parameters.AddWithValue(sp.ParameterName, sp.Value);
}
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
} private int InsertData(string strSql, OleDbParameter[] param)
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = strSql;
cmd.Connection = GetCon();
cmd.CommandType = CommandType.Text;
foreach (OleDbParameter sp in param)
{
cmd.Parameters.AddWithValue(sp.ParameterName, sp.Value);
}
return cmd.ExecuteNonQuery();
}
} protected void btnSave_Click(object sender, EventArgs e)
{
string strSql = "insert into UserInfo(UserName,Age) values(@name,@age)";
if (txtAge.Text.Trim().Length == 0 || txtName.Text.Trim().Length == 0) return;
InsertData(strSql, new OleDbParameter[] { new OleDbParameter("@name", txtName.Text.Trim()), new OleDbParameter("@age", txtAge.Text.Trim()) }).ToString(); repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
} protected void lkdel_click(object sender, EventArgs e)
{ LinkButton lb = sender as LinkButton;
string parm = lb.CommandArgument;
string strSql = "delete from UserInfo where id=@id";
InsertData(strSql, new OleDbParameter[] { new OleDbParameter("@id", parm) }).ToString();
repeater1.DataSource = GetCmdResult("select * from UserInfo");
repeater1.DataBind();
}问题是 当我第一次点击 save 按钮之后,repeater里面的数据没有变化,但是表里已经有了!之后每次显示的都是上一次的数据!删除也是这样子的! 但是加断点调试之后就是正常的!不是调试模式下就不正常。
后来试了一下。Access2007也是这样的! 但是用sql server就没有这个问题,都是正常的!
这具体是什么问题啊!麻烦各位大牛们教一下小弟! 小弟学习asp.net 不久!想弄清楚问题在哪里!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货