异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。希望能帮帮我!

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


...全文
355 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qizhenggang 2006-08-22
  • 打赏
  • 举报
回复
行 42: string OleDbCommandString ="select voteDetailsID,votrItem from votedetail where voteID="+var.voteID.ToString();
voteID是自动编号,那这里就应该是整形才对。

var.voteID 检查数据库里的类型,看和程序里的是不是一样.

suzicheng1231 2006-08-22
  • 打赏
  • 举报
回复
还是有问题 算了 我在重写一遍好了
  • 打赏
  • 举报
回复
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(); 去掉看看。
  • 打赏
  • 举报
回复
string OleDbCommandString ="select Count(*) from votedetail where voteID="+var.voteID.ToString();

为什么要tostring呢?voteid是string吗?
leafsword_519 2006-08-22
  • 打赏
  • 举报
回复
voteID="+var.voteID 定义是整形!
----------

voteID是整形,但是你的var.voteID不是一个数字,看你的类里面的定义,每个字段都是string 类型的,应该
int intVID = (int)var.voteID
然后再voteID="+var.voteID
suzicheng1231 2006-08-22
  • 打赏
  • 举报
回复
好郁闷!郁闷!!!

在加分 只要能解决 我好往下做哦!!!
疯狂秀才2018 2006-08-22
  • 打赏
  • 举报
回复
ACCESS经常出一些在SQL里不会出现的错误,也就是用正常的sql语句在ACCESS里不一定可行。。。。微软什么时候会搞的统一一点呀。。。。
顶了
suzicheng1231 2006-08-22
  • 打赏
  • 举报
回复
数据库里的是 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();
还是报出同样错误!! 能不能说详细点!


suzicheng1231 2006-08-22
  • 打赏
  • 举报
回复
我看看!

62,266

社区成员

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

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

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

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