我在写一个投票的时候出现的问题: 
  使用数据库是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   

解决方案 »

  1.   

    1、cmdVote.ExecuteScalar 需要sql语句是带有一个聚合函数的sql
    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(); 去掉看看。
      

  2.   

    行 42: string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID.ToString();
    voteID是自动编号,那这里就应该是整形才对。var.voteID 检查数据库里的类型,看和程序里的是不是一样.
      

  3.   

    数据库里的是 voteID ,voteDetailsID 内型 是自动编号! 
      voteID="+var.voteID.ToString();  ToString已经去掉了!  
      voteID="+var.voteID  定义是整形!cmdVote.ExecuteScalar 需要sql语句是带有一个聚合函数的sql 能不能解释一下?
      SQL语句改成
    string OleDbCommandString ="select Count(*) from votedetail where voteID="+var.voteID.ToString();
    还是报出同样错误!! 能不能说详细点!  
      

  4.   

    ACCESS经常出一些在SQL里不会出现的错误,也就是用正常的sql语句在ACCESS里不一定可行。微软什么时候会搞的统一一点呀。
    顶了
      

  5.   

    voteID="+var.voteID  定义是整形!
    ----------voteID是整形,但是你的var.voteID不是一个数字,看你的类里面的定义,每个字段都是string 类型的,应该
    int  intVID = (int)var.voteID 
    然后再voteID="+var.voteID
      

  6.   

    string OleDbCommandString ="select Count(*) from votedetail where voteID="+var.voteID.ToString();为什么要tostring呢?voteid是string吗?