数据库查寻出现错误E_FAIL(0x80004005)

nicholas34 2010-09-11 07:16:10
程序用SQL2005数据库正常,后来我把它改成Access就出现错误了
错误是:常详细信息: System.Data.OleDb.OleDbException: IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。

源错误:


行 74: OleDbDataAdapter sda = new OleDbDataAdapter(sql, sqlcon);
行 75: DataSet ds = new DataSet();
行 76: sda.Fill(ds);行 77: return ds;
行 78: sqlcon.Close();



代码如下:
数据库类 ODBdata.cs
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.OleDb;

public class ODBdata
{
private OleDbConnection sqlcon;
private OleDbCommand sqlcom;
private OleDbDataAdapter sqldata;

public ODBdata()
{
string ODBpath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(@"../App_Data\#data.mdb");
sqlcon = new OleDbConnection(ODBpath);
sqlcon.Open();
}

public DataSet bandshen(string sql)
{
OleDbDataAdapter sda = new OleDbDataAdapter(sql, sqlcon);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
sqlcon.Close();
}
}

页面left.aspx.cs代码
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.OleDb;

public partial class Manage_default_left : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeViewBind();
}
}

private void TreeViewBind()
{
string strsql = "select * from BackMenu where Position=0";
ODBdata da = new ODBdata();
using (DataSet ds = da.bandshen(strsql))
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode myNode = new TreeNode();
myNode.Text = ds.Tables[0].Rows[i]["purview_cn"].ToString();
this.TreeMenu.Nodes.Add(myNode);
}
}
}
}

------------------------------
本人发现一个问题select * from BackMenu where Position=0 这句搜索语句,一当去掉 where Position=0,程序就正常了,这是为什么呢,请问要怎么改?

之前用SQL2005数据是正常的,改成Access后才会出现这样的错误
...全文
406 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouzo 2011-08-09
  • 打赏
  • 举报
回复
麻烦把解决的代码,或者问题说清楚呢,谢谢,我也遇到同样的问题了!
wo526887848 2011-06-16
  • 打赏
  • 举报
回复
问题解决了。也不贴出来。害这些人白看了。
nicholas34 2010-09-11
  • 打赏
  • 举报
回复
错误的地方 我已找到了,问题解决了,不是你说的那里,不过还是要谢谢你了
nicholas34 2010-09-11
  • 打赏
  • 举报
回复
听你这么说后,我把 数据库字段名字改了,变成 select * from BackMenu where Pos=0
现在错误提示是: 异常详细信息:
System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。


行 74: OleDbDataAdapter sda = new OleDbDataAdapter(sql, sqlcon);
行 75: DataSet ds = new DataSet();
行 76: sda.Fill(ds);
77: return ds;
行 78: sqlcon.Close();

nicholas34 2010-09-11
  • 打赏
  • 举报
回复
select * from BackMenu where Position=0

这一句里 应该没用到吧? 要加那个? 能不能写出来,比较清楚点
wuyq11 2010-09-11
  • 打赏
  • 举报
回复
数据表里有些字段名用到了access的关键字
加[]
nicholas34 2010-09-11
  • 打赏
  • 举报
回复
错误显示 在这一行
行 76: sda.Fill(ds);
1.需要机房提供 信令点在哪个E1的哪个时隙、OPC和DPC、SLC、CIC从哪开始、ISUP还是TUP 呼叫是透传(如果是透传又分普通透传和呼叫前转两种)的还是隐藏的。 2.进入设备 EIS(config)#dev 40 1 E1[1][0]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][1]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][2]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][3]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][4]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][5]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][6]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 E1[1][7]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x2, errstate=0xf0, loopstate=4 useflag=为1代表PCM做了对应数据 state=状态为1,代表E1物理连接正常。 3.EIS(config)#ex EIS#sh mcc 16 ------------MCC global Informations----------------- HDLC mode is: ST_CO_64K. MCC Init Status = 1. MCC Init times = 1. MCC GOV FAIL times = 0. MCC GUN FAIL times = 0. MCC handle int times = 0. MCC recv int circle table ptr= 1459. -----------------------END-------------------------- ------------MCC channel 16 Informations----------------- chan16 send frames num = 27207878. chan16 recv frames num = 283003467. chan16 send FAILED num = 0. chan16 recv FAILED num = 0. 红色部分如果一直在增大,证明数据传输正常。如果变化的数字是一样的,E1可能自环。 chan16 send frames num = 27207878. chan16 recv frames num = 0. 如果这样的情况,就代表机房没做数据,或则双方的信令点没对上。 4.按照机房数据添加 这三个表 7号中继管理的 Web界面 命令界面 TG的OPC和DPC是10进制。如果机房提供的是非10进制的,需要转换。 7号MTP链路管理 Web界面 命令界面 上图是一个信令点在第一个E1的16时隙的例子。时隙一般是1或则16。 7号PCM管理 WEB界面 命令界面 上图是一个CIC从0开始的。如果从33开始就是PCM从1开始。 只要 和 这两个表做了数据,并和机房对应上,这个时候 Sh ss7 c就能看到7号链路建立,如果没建立成功。可以sh ss7 e看看有无报错。 号码属性的配置可以通过以下命令修改 EIS(config)#ss7 c Call change(y/n):n Not send LSTM(y/n):n 不发送LSTM Protocol is TUP(y/n):n 是否TUP Protocol is ISUP(y/n):n 是否ISUP Calling is subscriber(y/n):n 主叫用户号码 Calling is national(y/n):n 主叫国内号码 Calling is international(y/n):n 主叫国际号码 Called is subscriber(y/n):n 被叫用户号码 Called is national(y/n):n 被叫国内号码 Called is international(y/n):n 被叫国际号码 Protocol is itu-t(y/n):n Protocol is ansi(y/n):n Peer is shanghai alcatel-bell(y/n):n 送隐藏号码 清空numsect 表,在callpool表里加上机房提供的主叫号码 默认透传只需要 insert NumSect (0,0,255,65535,0,,,,0) 号码池里有这条数据即可 如果是呼叫前转的。 EIS(config)#select intparam (paramid=57) ROWID ParamID ParamDesc ParamVal -------------------------------------------------------------------------------------------- 107 57 Number transfer type(0:no trans, 1:PRA trans 2:SS7 trans) 2 清空numsect 表 在callpool表里加上机房提供的主叫号码 比如: 号码池 0206666 主叫 07557777 被叫: 1358888 eix上送过来的呼叫:主叫 07557777 呼叫被叫1358888 通过tg送出去之后,消息里面看起来就是 07557777呼叫给0206666,然后0206666呼转到1358888的 然后被叫手机1358888上还能正常显示主叫 07557777 pra对接 Pra的配置相对于7号就方便很多,只要和机房确定 每个E1是独立D通道。 还是就第一个E1有D通道,其他E1共用这个D通道。 交换机的接口是用户侧还是网络侧 如下图 这是一个每个E1都是D通道,交换机是网络侧的配置 命令里的显示 EIS(config)#db ex pratable insert PraTable (0,0,1,0,0,255,0,0,0) insert PraTable (1,0,1,1,0,0,0,0,0) insert PraTable (2,0,1,2,0,0,0,0,0) insert PraTable (3,0,1,3,0,0,0,0,0) insert PraTable (4,0,1,4,0,0,0,0,0) insert PraTable (5,0,1,5,0,0,0,0,0) insert PraTable (6,0,1,6,0,0,0,0,0) insert PraTable (7,0,1,7,0,0,0,0,0) EIS(config)#sel pratable (*) PRA群号 PRA接口ID E1端口号 是否D通道 绑定PRA群号 接口属性 ROWID PraGrpNo PraId SlotNo PortNo DChannel BindGrp E1所在槽位号,固定填1 NetMode CircSel Reserv 接口属性 -------------------------------------------------------------------------------------------------------- 0 0 0 1 0 0 255 0 0 0 1 1 0 1 1 0 0 0 0 0 2 2 0 1 2 0 0 0 0 0 3 3 0 1 3 0 0 0 0 0 7 4 0 1 4 0 0 0 0 0 6 5 0 1 5 0 0 0 0 0 5 6 0 1 6 0 0 0 0 0 4 7 0 1 7 0 0 0 0 0 如下图 这是一个只有第一个E1是D通道,其他E1共用第一个E1的D通道 命令行是 EIS(config)#db ex pratable insert PraTable (0,0,1,0,0,255,0,0,0) insert PraTable (1,0,1,1,1,0,0,0,0) insert PraTable (2,0,1,2,1,0,0,0,0) insert PraTable (3,0,1,3,1,0,0,0,0) EIS(config)#sel pratable (*) ROWID PraGrpNo PraId SlotNo PortNo DChannel BindGrp NetMode CircSel Reserv -------------------------------------------------------------------------------------------------------- 1 0 0 1 0 0 255 0 0 0 0 1 0 1 1 1 0 0 0 0 2 2 0 1 2 1 0 0 0 0 3 3 0 1 3 1 0 0 0 0 说明:  PRA群号:ETG/EIG进行PSTN呼出路由配置时所用的序号(由用户自己选择,一个PRA群需要配置一条D通道,一个PRA群可以包含多条E1);  PRA接口标识:每个PRA接口的标识(PRA接口ID代表该E1的标识,要与交换机保持一致;1条E1为一个PRA接口时一般填0);  槽位号:一般固定填写1;  E1端口号:接入PSTN的E1在EIG上对应的编号,编号依次为0-7;  是否D通路:是否将当前E1的第16时隙配置为PRA接口的D通路(信令通路),Dchannel=0代表配置了D通道;  NetMode=0代表用户侧接口,NetMode=1代表网络侧接口  CircSel为电路分配时的选择方式,电路选择方式(0最小,1最大,2循环) 1、如果是一个独立的PRA群,将“绑定PRA群号”配置成255即可。 2、如果要将PRA群0、PRA群1、PRA群2绑定,可以将PRA群1、PRA群2的“绑定PRA群号”配置成PRA群0,PRA群0的BindGrp无需配置,并且以PRA群0来配置呼出路由或SIP中继的落地PRA群号。 3、只需要在“D通道”所在的数据记录上配置即可。 4、如此配置之后,呼叫会在绑定的这几个PRA群中自动选择空闲的呼出。 5、sho q9 call或sho q9 sta 的统计信息没有变化:按照实际呼出、呼入时所在的接口进行统计、显示。 E1接好后可以通过这个命令查看 EIS(config)#dev 40 1 E1[1][0]: useflag=1, state=1, crc4=0, alarm=0, linestate=0x0, errstate=0x0, loopstate=4 (TG配置了PRA数据)(E1的物理状态) EIS#sh mcc 0 ------------MCC global Informations----------------- HDLC mode is: ST_CO_64K. MCC Init Status = 1. MCC Init times = 1. MCC GOV FAIL times = 0. MCC GUN FAIL times = 0. MCC handle int times = 0. MCC handle int times = 0. MCC recv int circle table ptr= 1787. -----------------------END-------------------------- ------------MCC channel 0 Informations----------------- chan0 send frames num = 65833. chan0 recv frames num = 65786. 这两行数据会变就代表数据收发正常 如果chan0 send frames num 有数据 chan0 recv frames num 没有数据,就代表我们做了PRA数据,机房没做 chan0 send FAILED num = 0. chan0 recv FAILED num = 1. chan0 TX UN interrupt num = 0. chan0 RX MRF interrupt num = 0. chan0 RX BSY interrupt num = 0. chan0 RX CRC errors num = 0. chan0 RX AB errors num = 1. chan0 RX NO errors num = 0. chan0 RX LG errors num = 0. chan0 RX BUF errors num = 0. chan0 RX SS7 SUERM errors num = 0. chan0 RX SS7 AERM errors num = 0. -------------------channel 0 END----------------------- ------------channel 0 BDs Informations----------------- chan0 txBdBase = 0x1939004. chan0 txBdNum = 32. chan0 txBdPtr = 9. chan0 rxBdBase = 0x1939104. chan0 rxBdNum = 32. chan0 rxBdPtr = 27. ----------------channel 0 BDs END---------------------- 数据做好后检查链路是否建立 EIS#sh q931 call E1 = 8 COMPORT = 128 DATA LINK STATE = ESTB //数据链路状态正常,反则为 WAIT_ ESTB CURRENT CALL NUM = 0 MAX CALL NUM AT SAME TIME= 0 当查询PRA状态时,如果状态为“故障”,可以遵循以下步骤进行排查: A) 检查存在故障的PRA接口对应的E1与EIG连接是否正常 B) 检查接口数据配置是否有误(例如D通路配置错误,将非D通道的E1配置为D通道,导致EIG与电信交换机PRA接口建立失败); 图1-1 E1连接示意图 C) 检查E1是否存在交叉连接(俗称鸳鸯线),即两E1的收发同时存在交叉连接(例如E1A的收发接到E1B的收发上),或两E1的收发部分存在交叉连接(例如E1A的收连接正确,而发却连接到E1B的发) D) 检查PRA接口的数据帧格式类型是否与交换机侧一致(此为高级设置,如果出现此类问题,请与厂商联系); 主从TG配置说明 1、选定一台tg作为主tg 2、在pubparam里面配置87号参数为main insert PubParam (87,tg series flag: [normal,main,slave],main) 3、保存数据库,重启系统 4、主tg重启后,在sip中继表中配置到从tg的sip中继信息,每一个从tg到主tg都必须配置一条中继,参数加密,ip地址认证 Insert SipTrunk (11,ss-1,cechi,888888,xxx.xx.xx.xx,2080,1,0,65535,0,00:00:00,00:00:00,65535,65535,0,0,1,1,0,0,2,0,0) 5、配置7号trunkno,配置mtp信息 6、配置ss7pcm信息时注意,最后一个字段siptrunk,参数65535代表本地的e1,从tg的e1信息时,siptrunk为到从tg的sip中继号 insert Ss7Pcm (0,1,0,65535) insert Ss7Pcm (0,0,7,11) 如上和从TG的SIP编号是11,所以指向从TG的PCM后trunkno=11 7、呼叫选路时,把主tg的七号中继,从tg的sip中继都要作为一个路由,顺序可以先从tg,再主tg的7号,或者自定义 从tg配置: 1、建议加载空白数据库,避免残留数据 2、公共参数表里面配置87参数为slave insert PubParam (87,tg series flag: [normal,main,slave],slave) 3、公共参数表里面配置88参数为主tg上对应从tg的sip中继密码 insert PubParam (88,tg series main tg password: ,888888) 4、公共参数表里面配置89参数为主tg的ip地址 insert PubParam (89,tg series main tg ip: ,xxx.xxx.xxx.xxx) 5、保存数据,重启 PS: 从TG不用配置,数据都是从主TG自动生成过去的 可以通过sh tg的命令查看TG状态 以下是主从连上后的状态 主TG上 EIS#sh tg Current tg role : main NO. SipTrunk State AvailableTs Ip ------------------------------------------- 0 11 Reg 248 xxx.xxx.xxx.xxx 从TG上 EIS#sh tg Current tg role : slave Main Tg Ip :xx.xx.xx.xx Main Tg SipTrunk :1 Main Tg Password :888888 ------------------------------------------- Regiseter State :Registered Link State :Connect Main Tg Signal State :Connect

62,071

社区成员

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

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

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

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