DropDownList的第一个选项值的问题

空心兜兜 2009-05-21 09:11:49
我做考试报名系统的“考生报名”功能:
考生登录,进入该功能页面,选择相应的考试名称,点击“报名”
先检查报名表下,登陆考生是否已经对该考试信息进行报名
有,则弹出MsgBox(“您已经报名”)
无,则报名,提示(“报名成功”)

reg.aspx

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:strConnection1 %>"
SelectCommand="SELECT [ExamId], [ExamName] FROM [Examinations]"></asp:SqlDataSource>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1"
DataTextField="ExamName" DataValueField="ExamId" DataMember="DefaultView">
</asp:DropDownList>
<br />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />




reg.aspx.cs


protected void Button1_Click(object sender, EventArgs e)
{
string strConnection = ConfigurationSettings.AppSettings["strConnection"];
SqlConnection con = new SqlConnection(strConnection);
con.Open();
string strselect = "select StuId from Registration where ExamId='"+ this.DropDownList1.SelectedValue +"'";
SqlCommand cmd = new SqlCommand(strselect, con);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(strselect, con);
da.Fill(ds, "Registration");
try
{
//是否重复报名
if (Session["User"].ToString() == ds.Tables[0].Rows[0].ItemArray[0].ToString().Trim())
{
con.Close();
Response.Write("<script language=javascript>alert('您已经报名!')</script> ");
}
else
{
string strinsert = "insert into Registration (StuId,ExamId,RegTime) values('" + Session["User"].ToString() + "','" + this.DropDownList1.SelectedValue + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "')";
SqlCommand cmd1 = new SqlCommand(strinsert, con);
cmd1.ExecuteNonQuery();
con.Close();
Response.Write("<script language=javascript>alert('报名成功!')</script> ");
}
}
//错误处理
catch
{
con.Close();
Response.Write("<script language=javascript>alert('出错了!')</script> ");
}




运行登陆后,在该页面,假如选择了第一项考试(无论是默认的选择还是先选别的再选第一个),似乎检测不到重复报名,直接向数据库插入相同记录
而选择别的考试,都可以检查到重复


这个该怎么处理呢?



...全文
251 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
freemeditator 2009-05-22
  • 打赏
  • 举报
回复
mark
流枫Maple 2009-05-22
  • 打赏
  • 举报
回复
学习了
空心兜兜 2009-05-22
  • 打赏
  • 举报
回复
有个朋友给了段存储过程,并根据存储过程改了页面代码,实现了

存储过程

CREATE PROC spCheckAndUpdate
(
@StuId VARCHAR(50),
@ExamId VARCHAR(50)
)
AS
IF NOT EXISTS (SELECT 1 FROM Registration WHERE StuId = @StuId AND ExamId = @ExamId) BEGIN
INSERT INTO Registration(StuId, ExamId, RegTime) VALUES (@StuId, @ExamId, GETDATE())
SELECT 0
END ELSE BEGIN
SELECT 1
END






*.aspx.cs代码

protected void Button1_Click(object sender, EventArgs e)
{
//string strConnection = @"server=XXY\SQLEXPRESS;database=XSample;Integrated Security=SSPI";
string strConnection = ConfigurationSettings.AppSettings["strConnection"];
using (SqlConnection conn = new SqlConnection(strConnection))
{
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "spCheckAndUpdate";
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddRange(
new SqlParameter[] {
new SqlParameter("@StuId", Session["User"].ToString()),
new SqlParameter("@ExamId", this.DropDownList1.SelectedValue),
});
//comm.Parameters.AddRange(
// new SqlParameter[] {
// new SqlParameter("@StuId", "X.X.Y1"),
// new SqlParameter("@ExamId", "001"),
// });
conn.Open();
int fResult = (int)comm.ExecuteScalar();
string fMsg = string.Format("alert('{0}');", (fResult == 0) ? "报名成功!" : "您已经报名!");
this.ClientScript.RegisterStartupScript(typeof(string), "exist", fMsg, true);
}
}



功能实现了
空心兜兜 2009-05-22
  • 打赏
  • 举报
回复
想了个下策
这个按钮就做检验吧
再弄一个做插入
happy664618843 2009-05-22
  • 打赏
  • 举报
回复
DropDownList1.Items.insert(0,"请选择");
空心兜兜 2009-05-22
  • 打赏
  • 举报
回复
不知道该怎么调………………
我姓区不姓区 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ccs02287 的回复:]
还是没找到答案

抓破头了- -
[/Quote]
调试了没有
空心兜兜 2009-05-22
  • 打赏
  • 举报
回复
还是没找到答案

抓破头了- -
chen870201 2009-05-22
  • 打赏
  • 举报
回复
好像没看出来什么错误
SqlDataReader sdr = cmd.ExecuteReader();
if(sdr.Read())

这个值会是什么情况呢?
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ojlovecd 的回复:]


建议你先加断点调试一下到底是哪里出错了,这样才能对症下药,话说楼主以前是不是搞vb的?

[/Quote]


以前是啥也不会的- -
才开始学



我姓区不姓区 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ccs02287 的回复:]
我在12楼说错了
string strselect = "select 1 from Registration  where ExamId='"+ this.DropDownList1.SelectedValue +"' and StuId='" + Session["User"] + "'";
这个是可以实现的,不过只能实现检查已经报名的
如果换个没有报名的来,就到“出错了”


是否可以把insert语句也放在catch里?



[/Quote]
建议你先加断点调试一下到底是哪里出错了,这样才能对症下药,话说楼主以前是不是搞vb的?
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
我在12楼说错了
string strselect = "select 1 from Registration where ExamId='"+ this.DropDownList1.SelectedValue +"' and StuId='" + Session["User"] + "'";
这个是可以实现的,不过只能实现检查已经报名的
如果换个没有报名的来,就到“出错了”


是否可以把insert语句也放在catch里?



我姓区不姓区 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ccs02287 的回复:]
用了2楼的代码,
select * from ………………
就通过了


[/Quote]
select *当然是可以,但要把所有列都查出来,效率可想而知,select 1是很快的
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
用了2楼的代码,
select * from ………………
就通过了

我姓区不姓区 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ccs02287 的回复:]
用了2楼的代码,if过不去,提示“出错了”


top 1的话,查询不到,所有考试都重复报名了

[/Quote]

有没有加断点调试过是什么错?
不是top 1,我那个没有写错,就是select 1,没有top的
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
用了2楼的代码,if过不去,提示“出错了”



top 1的话,查询不到,所有考试都重复报名了
wuyq11 2009-05-21
  • 打赏
  • 举报
回复
string strselect = "select count(StuId) from Registration where ExamId='"+ this.DropDownList1.SelectedValue +"'";
或用top1
最好方法是通过ajax异步调用web services查询数据,实现判断。同注册时用户名判断。
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
谢谢2、6楼,我试试
空心兜兜 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhaoqiliang527 的回复:]
string strselect = "select StuId from Registration where ExamId='"+ this.DropDownList1.SelectedValue +"'";
StuId 是学生的ID?名字?
Session["User"].ToString()存储的是名字还是学生ID?
[/Quote]

都是学生ID

wanghao3616 2009-05-21
  • 打赏
  • 举报
回复

两个字符串比较用 if (Session["User"].ToString().Equals(ds.Tables[0].Rows[0].ItemArray[0].ToString().Trim()))
加载更多回复(4)

62,046

社区成员

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

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

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

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