我做了一个用来显示数据的页面,用的是SqlClient连接SQL,主要是用多重循环显示一个excel表格,运行很正常,可是这个页面是需要连接oracle的,我这里没有这个环境,就先用SQL写代码,准备到时候改一下连接(oracle用OleDb连接,和连接Access一样),我从来没有连接过oracle,然后代码写完了,准备该成OleDb连接Access试一下,到时候给别人的话直接改oracle的连接字符串就可以了。没想到这里出了问题,改成OleDb连接Access报错,调试了很多方法,代码如下public class oledb
{
private System.Data.OleDb.OleDbConnection conn;
public oledb(string ConnectionString)
{
conn=new System.Data.OleDb.OleDbConnection(ConnectionString);
}
public void ExecuteQuery(string SelectString,ref DataSet ds,string TableName)
{
System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter(SelectString,conn);
da.Fill(ds,TableName);
}
}
这段代码是可以用的,可以返回ds,但我的一段代码用的双循环提取ds,这里就出错了:
标准表达式中数据类型不匹配。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。源错误:
行 261: {
行 262: System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter(SelectString,conn);
行 263: da.Fill(ds,TableName);
行 264: }
行 265: }我用单循环读区可以出来,可是套循环后就报这个错,是不是因为access是单连接的数据库的原因?大家知不知道这个错是什么原因造成的?如果不明白回帖问,我在线等
{
private System.Data.OleDb.OleDbConnection conn;
public oledb(string ConnectionString)
{
conn=new System.Data.OleDb.OleDbConnection(ConnectionString);
}
public void ExecuteQuery(string SelectString,ref DataSet ds,string TableName)
{
System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter(SelectString,conn);
da.Fill(ds,TableName);
}
}
这段代码是可以用的,可以返回ds,但我的一段代码用的双循环提取ds,这里就出错了:
标准表达式中数据类型不匹配。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。源错误:
行 261: {
行 262: System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter(SelectString,conn);
行 263: da.Fill(ds,TableName);
行 264: }
行 265: }我用单循环读区可以出来,可是套循环后就报这个错,是不是因为access是单连接的数据库的原因?大家知不知道这个错是什么原因造成的?如果不明白回帖问,我在线等
解决方案 »
- datagridview中如何添加删除修改数据
- [初学者求教]如果i一定是0开始的话 这句该怎么改
- 查询思路问题?
- 弹出单按纽窗口后转向其他页面,请高手指教
- 如何改变模板列中的checkbox控件的CheckedChanged()方法
- 帮忙看看这种问题是怎么产生的?
- 让一个LinkButton只执行javascript应该怎么用
- 有关web上的大量数据传输的专题讨论,结帖时妙论者高分相赠
- 请问怎么解决ISAM的问题(关于数据库)?
- 请教高手,当跳转到另外一页的时候怎样清除在上一页的代码中添加到Session 中的数据?急!!!!!!!!
- 调试出错:The .Net Data OLE DB Provider(System.Data.OleDb) requires Microsoft Data Access Components(MDAC) version 2.6 or later.
- 一个javascript的简单问题?
private void Page_Load(object sender, System.EventArgs e)
{
sql1=new oledb(ConnectionString.connectionstring);
string selectSF="select * from SF_DICT";
DataSet ds=new DataSet();
sql1.ExecuteQuery(selectSF,ref ds,"SF");
for(int a=0;a<ds.Tables["SF"].Rows.Count;a++)
{
TableRow trSF=new TableRow();
TableCell tcSF=new TableCell();
tcSF.Text=ds.Tables[0].Rows[a]["SFMZ"].ToString();
trSF.Cells.Add(tcSF);
Table1.Rows.Add(trSF);
}
}
这是可以运行的,可是在中间加一个循环就报上面的错了
{
sql1=new oledb1(ConnectionString.connectionstring);
string selectSF="select * from SF_DICT"; DataSet ds=new DataSet();
sql1.ExecuteQuery(selectSF,ref ds,"SF");
for(int a=0;a<ds.Tables["SF"].Rows.Count;a++)
{
TableRow trSF=new TableRow(); //创建行
TableCell tcSF=new TableCell();
tcSF.Text=ds.Tables[0].Rows[a]["SFMZ"].ToString(); ///读取记录
trSF.Cells.Add(tcSF);
sql1.ExecuteQuery("select * from DS_DICT where SID='" + ds.Tables[0].Rows[a]["OBJECTID"].ToString() + "'",ref ds,"DS"); //内循环,根据上个循环内得到的数据进行子循环
if(ds.Tables["DS"].Rows.Count>0)
{
for(int b=0;b<ds.Tables["DS"].Rows.Count;b++)
{
TableRow trDS=new TableRow(); //创建子循环的行
TableCell tcDS=new TableCell();
tcDS.Text="<b>"+ds.Tables[1].Rows[b]["DSMZ"].ToString()+"<b>";
trDS.Cells.Add(tcDS);
Table1.Rows.Add(trDS);
}
}
ds.Tables[1].Clear();
Table1.Rows.Add(trSF);
}
}这段就无法执行了,问,为什么?why?
表DS_DICT的SID的数据类型是什么?如果是INT的话,那么你加两个单引号出错!
sql1.ExecuteQuery("select * from DS_DICT where SID=" + ds.Tables[0].Rows[a]["OBJECTID"].ToString(),ref ds,"DS");
-------------------------------------------------------------------------------------
一.不管是对何种数据库,在操作时全部放进Try{..}Catch{..}finally{}
1. 出错时可直接补捉到
2. 不会在需要关闭连接时,因为没有关闭而造成连接过多
二.建议在提取数据时,一次性提取出来
以你上面的代码完全可以一次性将SF_DICT和DS_DICT两张表的数据提取出来,
SID是自动增长的int型,但在写sql语句时可以加单引号,结果到access成了自动编号,就不能加单引号了。好了,结帐