我在写一个投票的时候出现的问题:
使用数据库是Access
voteMaster表
voteID 自动编号
voteTitle 项目
voteSum 总票数
votedetail表
voteID
voteDetailsID ID
votrItem 投票的项目
voteNum 数量代码如下:
namespace Blog_su
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb; /// <summary>
/// Vote 的摘要说明。
/// </summary>
public class Vote : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label LblVoteTitle;
protected System.Web.UI.WebControls.RadioButtonList rBtnVote;
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
BindTitle();
BindRbtn();
}
// 在此处放置用户代码以初始化页面
}
public void BindTitle()
{//读取数据库资料定义Title
variable var = new variable();//里面是定义的字段
OleDbConnection con= DB.createConnection();
con.Open();
OleDbCommand cmdVote = new OleDbCommand("select voteTitle from voteMaster where voteID=" + var.voteID,con);
this.LblVoteTitle.Text = Convert.ToString(cmdVote.ExecuteScalar());
con.Close();
}
public void BindRbtn()
{
//绑定rBtn数据
variable var = new variable();
OleDbConnection con= DB.createConnection();
con.Open();
string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID;
OleDbCommand cmdRbtn = new OleDbCommand(OleDbCommandString ,con);
OleDbDataReader odr = cmdRbtn.ExecuteReader();
this.rBtnVote.DataSource =odr;
this.rBtnVote.DataTextField ="votrItem";
this.rBtnVote.DataValueField ="voteDetailsID";
this.rBtnVote.DataBind();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}---------------------------------------------------------------------------------------
//variable .cs 定义的字段
using System;
namespace Blog_su
{
/// <summary>
/// variable 的摘要说明。
/// </summary>
public class variable
{
//工具拦
public string toolID;
public string tooName;
public string toolUrl;
public int toolOrder;
public bool isToolVisible;
public string tableName;
//user
public string powerId;
public string userName;
public string userPwd;
public string userQQ;
public string userEmail;
public string userRegDate;
public string userLogo;
//投票表字段(voteMaster)
public string voteID="1";
public string voteTitle;
public string voteSum;
//投票(votedetails)
public string voteDetailsID;
public string votrItem;
public string voteNum; public variable()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
} -----------------------------------------------------------------------------------
之前写 登陆 与 注册 insert 和 select 操作数据库 都没什么问题 但是 写这个的时候就出现了问题!我实在没办法解决了,希望各位能帮帮我!报出错误:标准表达式中数据类型不匹配。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。源错误:
行 42: string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID.ToString();
行 43: OleDbCommand cmdRbtn = new OleDbCommand(OleDbCommandString ,con);
行 44: OleDbDataReader odr = cmdRbtn.ExecuteReader();
行 45: this.rBtnVote.DataSource =odr;
行 46: this.rBtnVote.DataTextField ="votrItem";
源文件: c:\inetpub\wwwroot\blog-su\vote.ascx.cs 行: 44
使用数据库是Access
voteMaster表
voteID 自动编号
voteTitle 项目
voteSum 总票数
votedetail表
voteID
voteDetailsID ID
votrItem 投票的项目
voteNum 数量代码如下:
namespace Blog_su
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb; /// <summary>
/// Vote 的摘要说明。
/// </summary>
public class Vote : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label LblVoteTitle;
protected System.Web.UI.WebControls.RadioButtonList rBtnVote;
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
BindTitle();
BindRbtn();
}
// 在此处放置用户代码以初始化页面
}
public void BindTitle()
{//读取数据库资料定义Title
variable var = new variable();//里面是定义的字段
OleDbConnection con= DB.createConnection();
con.Open();
OleDbCommand cmdVote = new OleDbCommand("select voteTitle from voteMaster where voteID=" + var.voteID,con);
this.LblVoteTitle.Text = Convert.ToString(cmdVote.ExecuteScalar());
con.Close();
}
public void BindRbtn()
{
//绑定rBtn数据
variable var = new variable();
OleDbConnection con= DB.createConnection();
con.Open();
string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID;
OleDbCommand cmdRbtn = new OleDbCommand(OleDbCommandString ,con);
OleDbDataReader odr = cmdRbtn.ExecuteReader();
this.rBtnVote.DataSource =odr;
this.rBtnVote.DataTextField ="votrItem";
this.rBtnVote.DataValueField ="voteDetailsID";
this.rBtnVote.DataBind();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}---------------------------------------------------------------------------------------
//variable .cs 定义的字段
using System;
namespace Blog_su
{
/// <summary>
/// variable 的摘要说明。
/// </summary>
public class variable
{
//工具拦
public string toolID;
public string tooName;
public string toolUrl;
public int toolOrder;
public bool isToolVisible;
public string tableName;
//user
public string powerId;
public string userName;
public string userPwd;
public string userQQ;
public string userEmail;
public string userRegDate;
public string userLogo;
//投票表字段(voteMaster)
public string voteID="1";
public string voteTitle;
public string voteSum;
//投票(votedetails)
public string voteDetailsID;
public string votrItem;
public string voteNum; public variable()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
} -----------------------------------------------------------------------------------
之前写 登陆 与 注册 insert 和 select 操作数据库 都没什么问题 但是 写这个的时候就出现了问题!我实在没办法解决了,希望各位能帮帮我!报出错误:标准表达式中数据类型不匹配。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。源错误:
行 42: string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID.ToString();
行 43: OleDbCommand cmdRbtn = new OleDbCommand(OleDbCommandString ,con);
行 44: OleDbDataReader odr = cmdRbtn.ExecuteReader();
行 45: this.rBtnVote.DataSource =odr;
行 46: this.rBtnVote.DataTextField ="votrItem";
源文件: c:\inetpub\wwwroot\blog-su\vote.ascx.cs 行: 44
2、
this.rBtnVote.DataSource =odr;
this.rBtnVote.DataTextField ="votrItem";
this.rBtnVote.DataValueField ="voteDetailsID";
this.rBtnVote.DataBind();
这个以前,应当判断一下odr.hasrows,看看是否返回多个结果。
3、
行 42: string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID.ToString();
voteID是自动编号,那这里就应该是整形才对。.ToString(); 去掉看看。
voteID是自动编号,那这里就应该是整形才对。var.voteID 检查数据库里的类型,看和程序里的是不是一样.
voteID="+var.voteID.ToString(); ToString已经去掉了!
voteID="+var.voteID 定义是整形!cmdVote.ExecuteScalar 需要sql语句是带有一个聚合函数的sql 能不能解释一下?
SQL语句改成
string OleDbCommandString ="select Count(*) from votedetail where voteID="+var.voteID.ToString();
还是报出同样错误!! 能不能说详细点!
顶了
----------voteID是整形,但是你的var.voteID不是一个数字,看你的类里面的定义,每个字段都是string 类型的,应该
int intVID = (int)var.voteID
然后再voteID="+var.voteID