SqlDataReader问题请大侠们帮忙指点迷津,不胜感激!

青峰守望 2012-06-22 10:46:45
这段代码执行后老是提示,SqlDataReader dr = Com.ExecuteReader();附近有语法错误。可我对这个不是太明白,刚刚学.NET
这个代码是ASP.NET程序开发范例宝典(C#)上的源代码
我只改了部分数据库连接的部分,请大侠们帮忙指点迷津,不胜感激!
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class Result : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string cmdtxt1 = "server=(local);database=db_13;Uid=sa;Pwd=hzdprm123!@#";
SqlConnection Con = new SqlConnection(cmdtxt1);
Con.Open();
SqlCommand Com = new SqlCommand("select * from tb_06 where ID=" + Request["ID"] + "", Con);
SqlDataReader dr = Com.ExecuteReader();
dr.Read();
string strContent = null;
if (dr.HasRows)
{
strContent = dr["Content"].ToString();
}
dr.Close();
decimal decNumAll = GetNumAll(strContent);//得到所有票数,C#在除法运算中需用decimal类型,否则将会把小数点后的数去掉
Response.Write(GetResult(strContent, decNumAll));
}

/// <summary>
/// 显示图象
/// </summary>
/// <param name="strContent">相关主题下的内容</param>
/// <param name="decNumAll">所有的票数</param>
/// <returns></returns>
public string GetResult(string strContent, decimal decNumAll)
{
string[] arrContent = strContent.Split('|');
string strBody = "<body style=text-align:center><table width=60% border=1 cellpadding=0 cellspacing=0 text-align:center>\n";
foreach (string strContentIN in arrContent)
{
string strItemName = strContentIN.Split(',')[1].ToString();//得到选项名称
decimal decItemNum = Convert.ToDecimal(strContentIN.Split(',')[0]);//得到选项的投票数
decimal decPercent = GetPercent(decItemNum, decNumAll) * 100;//得到百分比
string strPercent = decPercent.ToString();//将百分比转为字符型
if (strPercent.Length > 5)//如果百分比结果长度超过5位
{
strPercent = strPercent.Substring(0, 5);//将百分比的余数截短为“00.00”
}
strBody += "<tr><td width=100 style=font-size:9pt;text-align:center>" + strItemName + "</td><td width=50 style=font-size:9pt;color=red;text-align:center>" + decItemNum.ToString() + "票</td><td style=font-size:9pt><img src=Images/bar1.gif height=10 width=" + strPercent + "%>" + strPercent + "%</td></tr>\n";
}
strBody += "</table></body>";
return strBody;
}


/// <summary>
/// 票数求和
/// </summary>
/// <param name="strNum">当前所要操作的字串</param>
/// <returns></returns>
public decimal GetNumAll(string strNum)
{
decimal decNumAll = 0;
string[] arrNum = strNum.Split('|');
foreach (string strNumIN in arrNum)
{
decNumAll += Convert.ToInt32(strNumIN.Split(',')[0].ToString());//截取第零位
}
return decNumAll;
}

/// <summary>
/// 百分比
/// </summary>
/// <param name="decItem">当前选项本身的票数</param>
/// <param name="decNumAll">所有的票数</param>
/// <returns></returns>
public decimal GetPercent(decimal decItem, decimal decNumAll)
{
if (decNumAll == 0)//如果总票数是零
{
decNumAll++;//加一,避免除0出错
}
decimal decPercent = decItem / decNumAll;
return decPercent;
}
}
...全文
164 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
青峰守望 2012-06-24
  • 打赏
  • 举报
回复
嗯,谢谢了各位!学习.NET还是任重而道远啊,与诸君共勉来了。
cs_esharp 2012-06-23
  • 打赏
  • 举报
回复
自学的话,有针对性的学习要好些,如果有人教的话,系统学习
孟子E章 2012-06-23
  • 打赏
  • 举报
回复
是这个样子
strBody += "<tr><td class=tableBottom>·<a href=Result.aspx?ID=" + dr["ID"].ToString() + " >" + dr["Title"].ToString() + "</a></td></tr>\n";
AI观星台 2012-06-23
  • 打赏
  • 举报
回复
捡砖没关系,你都先捡着,但你以后要都把零散的砖拼起来,这就需要你的汇总和总结了。

[Quote=引用 3 楼 的回复:]
嗯非常谢谢,tb_06是存在的,这张表里面也有ID的,我可不可以问一下,学习.NET是不是就是今天捡一块砖,明天捡一块,还是直接先系统学习。感觉.NET 的内容好庞杂啊!
[/Quote]
孟子E章 2012-06-22
  • 打赏
  • 举报
回复
你的url里面有
xxx.aspx?ID=xxx这样的内容吗


如果post,则需要
<input name="ID" value="xxx"之类的
青峰守望 2012-06-22
  • 打赏
  • 举报
回复
这个Request["ID"]仍是为空,
__天涯寻梦 2012-06-22
  • 打赏
  • 举报
回复
dr.HasRows 不需判断
SqlDataReader dr = Com.ExecuteReader();
string strContent = null;
if (dr.Read())
{
strContent = dr["Content"].ToString();
}
这样就可以,另外在 Page_Load 最上面加上
object obj = Request["ID"];
if (obj == null)
{
return;
}
在 if (obj == null) 这行设置断点,单步执行下去,看看是否是 null
孟子E章 2012-06-22
  • 打赏
  • 举报
回复
最好先系统学习下基础知识,如c#基本语法,asp.net基本的概念等
青峰守望 2012-06-22
  • 打赏
  • 举报
回复
嗯非常谢谢,tb_06是存在的,这张表里面也有ID的,我可不可以问一下,学习.NET是不是就是今天捡一块砖,明天捡一块,还是直接先系统学习。感觉.NET 的内容好庞杂啊!
宝_爸 2012-06-22
  • 打赏
  • 举报
回复
SqlCommand Com = new SqlCommand("select * from tb_06 where ID=" + Request["ID"] + "", Con);

这是时候的sql语句是什么?
Request["ID"] 是null了,或者 tb_06不存在, 或者ID不存在
孟子E章 2012-06-22
  • 打赏
  • 举报
回复
Request["ID"]没传值进来
青峰守望 2012-06-22
  • 打赏
  • 举报
回复
这个问题已经解决了,谢谢大家,我改了Default.aspx.cs 文件的数据库连接,估计时这两个页面是相互关联的,我没有把那个默认页面的ID给传过来。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //添加引用

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

public string GetList()
{
string cmdtxt1 = "server=(local);database=db_13;Uid=sa;Pwd=hzdprm123!@#";
SqlConnection Con = new SqlConnection(cmdtxt1);
Con.Open();
SqlCommand Com = new SqlCommand("select * from tb_06 ",Con);
SqlDataReader dr = Com.ExecuteReader();
string strBody = "<table width=150>";
while (dr.Read())//循环读取
{
strBody += "<tr><td class=tableBottom>·<a href=Result.aspx?ID=" + dr["ID"] + " >" + dr["Title"].ToString() + "</a></td></tr>\n";
}
dr.Close();//关闭阅读器
strBody += "</table>";
Con.Close();
return strBody;
}
}
大家看是这个样子的吗?再次感谢大家的帮助。

62,046

社区成员

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

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

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

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