您的位置:首页 > 编程语言 > ASP

asp.net中的数据连接

2017-03-28 17:10 232 查看
在安装了32位Office的机器上安装这个64位的ODBC驱动。下面是更改方法:

先用7zip把AccessDatabaseEngine_X64.exe接压缩,里面会有一个AceRedist.msi安装文件,然后用Orca软件打开这个MSI,找到LaunchCondition里面的BLOCKINSTALLATION,删掉,保存。现在在运行AceRedist.msi,哈哈,非常顺利。经过我的测试,使用上也完全没问题。

Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别

在通过ADO对Excel对象进行连接时(此时Excel则认为是一个数据源),需要配置对Excel数据源对应的连接串,这个连接串中包括了Provider信息(其实类似对数据库进行连接操作时,都需要指定连接字符串),以下是一行连接串源代码:

strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strExcelFilePath & ";Extended Properties=Excel 12.0"

这里的Provider使用了Microsoft.ACE.OLEDB.12.0,其实除了Microsoft.ACE.OLEDB.12.0,还有Microsoft.Jet.OLEDB.4.0,它们俩者之间有什么联系和区别呢:

 

共同点:都是做为连接Excel对象的接口引擎

不同点:

对于不同的Excel版本,有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。

Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007。

ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。

另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

所以,在使用不同版本的office时,要注意使用合适的引擎。

Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007。

ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。
另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。
所以,在使用不同版本的office时,要注意使用合适的引擎。

以上对access同样有效。
Jet连接语句:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\您的数据库名.mdb;Persist Security Info=True;Jet OLEDB:Database Password=您的数据库密码
ACE连接语句:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\您的数据库名.accdb;Persist Security Info=True;Jet OLEDB:Database Password=您的数据库密码

OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询http://www.cnblogs.com/qanholas/archive/2012/07/21/2601993.html

遇到了一个问题,从excel导入数据到sql2005,之前操作过很多次,这次遇到了一些新情况。
  使用的语句如下:
  select * from OpenRowSet
         ('Microsoft.Jet.OLEDB.4.0',
          'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
           [Sheet1$]
          )
 结果提示错误:因为 OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。
 后来我在服务器上安装了ACE2010的驱动,64位的。 http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=c06b8369-60dd-4b64-a44b-84b371ede16d 修改了代码
 select * from OpenRowSet
         ('Microsoft.ACE.OLEDB.12.0',
          'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
           [Sheet1$]
          )
但是还是出错,提示信息如下:
无法从链接服务器 "(null)" 的 OLE DB 访问接口"Microsoft.ACE.OLEDB.12.0"获取列信息。
注意:执行以上sql语句的数据库必须是本地数据库,如果为远程的数据库就会报上面的错误(这里的地址是指的本地地址,也就是数据库服务器上的磁盘地址)。
我尝试在本地的32位系统上的数据库操作,一切正常
然后我又在服务器上上传了excel文件,在服务器上执行语句,一切正常。
然后又在本地执行相同的语句,注意这里的e盘的bb的excel是指的服务器上的e盘,正常。

下面总结解决方式:
1、在SQL Server 外围应用配置器中启用 OpenRowSet 和 OpenDataSource函数
2、执行以上sql语句的数据库必须是本地数据库,如果为远程的数据库就会报上面的错误
3、链接字符串 Extended Properties属性的内容要以分号间隔并用双引号括起来,sheet1$ 在括号外
4、注意office的版本4.0是office2003,12.0是office2007的版本,看看是否装了驱动。
5、最为关键的是要看sql server 版本号,是32位的还是64位的。x64位的sql server很多的office的驱动是不支持的。
所以如果搞不成的话,不妨放到32位的sqlserver ,会有不少的收获
原博客地址:http://wep2008.blogbus.com/logs/35390970.html
64位下OPENROWSET运行出现错误
在SSMS中执行:SELECT CustomerID, CompanyName
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'D:\nwind.mdb';
      'admin';'',Customers)
消息7308,级别16,状态1,第1 行
因为OLE DB 访问接口'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。
  我的环境SQL Server 2008(64位)+windows2008r2(64位)
解决办法: http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/58c4c61e-fa86-4809-bf7d-21bacb055d3e/
下载最新的驱动

原因是:在64SQL Engine中已经不提供jet.oledb.4.0的驱动了
解决方法:下载一个ACE.Oledb.12.0 for X64位的驱动,并把连接字符串Microsoft.jet.Oledb.4.0 更改为 Microsoft.ACE.OLEDB.12.0

从Web.config文件中读取数据库连接的字符串

http://blog.csdn.net/zc707212993/article/details/46505139

 

(1)在Web.config文件中配置与数据库连接的字符串

 对于应用程序而言,可能需要在多个页面的程序代码中使用数据连接字符串来连接数据库。当数据库连接字符串发生改变时(如应用程序被转移到其他计算机上运行),要修改所有的连接字符串。设计人员可以在配置字节中定义应用程序的数据库连接字符串,所有的程序代码从该配置节读取字符串,当需要改变连接时,只需要在配置节中重新设置即可。下面的代码演示了如何将应用程序的数据库连接字符串存储在配置节中。

2)获取Web.config文件中与数据库连接的字符串

 可以通过一段代码获取与数据库连接的字符串,并返回SqlConnection类对象,代码如下:

SQLServer中ADO,OLEDB,ODBC的区别http://blog.csdn.net/zhaohuanhuanjiuqi/article/details/17270065

 三种方式的差别:

如果是ADO方式,则

命名空间中引入的是:ImportsSystem.Data.SqlClient

连接数据库使用的相应对象为:SqlCommand,SqlConnection,SqlDataAdapter,SqlDataReader

如果是ODBC方式,则

命名空间中引入的是:ImportsSystem.Data.Odbc

连接数据库使用的相应对象为:OdbcCommand,OdbcConnection,OdbcAdapter,OdbcDataReader

如果是OLEDB方式,则

命名空间中引入的是:ImportsSystem.Data.Oledb

连接数据库使用的相应对象为:OledbCommand,OledbConnection,OledbAdapter,OledbDataReader

 

 怎么查看软件是32位的还是64位的

首先我们在要查看的软件图标上面右击,在弹出来的菜单中选择“属性”。然后看其安装路径,如果路径中含有Program Files (x86),那么软件就是32位的,如果只含有Program Files而没有 (x86),那么就是64位的。

任务管理器——进程:

然后看其名称,如果含有*32,那么不用说就知道是32位的,如果没有就是64位的。

文件位置的表示相关问题:

目录概念:运行的应用程序的当前工作目录和运行应用程序所在的目录的区别?

解释(初步自我理解):应用程序白话就是那个可执行的程序文件本身,这个文件(例如.exe文件)所在的目录。





应用程序所在的目录(运行目录?):该进程从中启动的目录,即程序文件自身所在的目录。

所以,当前工作目录和程序所在的目录可以不同。

Windows获取程序全路径的接口是:GetModuleFileName

CRun-Time库获取程序全路径接口是:_get_tpgmptr

工作目录:是一个环境变量,可在程序运行后随时进行设置更改。工作目录主要影响程序中使用到的相对路径。

当前工作目录(CurrentWorkingDirectory)

一般来说,每个进程都有一个与之相关联的分级文件系统(hierarchicalfile system)下的目录,称之为该进程的当前工作目录。

如果程序刚进入main入口处的时候,当前工作目录其实就是程序启动的目录,但是当前工作目录是可以通过程序进行设置或者随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。

 

 

如何:查找 Web 应用程序的根目录https://msdn.microsoft.com/zh-cn/library/ms521436(v=office.12).aspx

 弄清概念:

应用程序和网站的区别:

 如何更改当前 Web 应用程序根目录

 

1、在批处理文件中经常看见有"program~1"之类的写法,又如"%~dp0bin\amd64\vcvarsamd64.bat",有谁知道其中的"~"是什么意思?

因为纯DOS只支持8.3命名规则,文件基本名必须小于8个字符。Program~1,加上最后的数字序号可能是有两个或两个以上的文件夹或文件,并且它们名称开头的7个字符是一样的。

program~1是转成了短文件名,后面的1代表是当前目录下排序progra六个字母开头的第一个文件夹,如果还有一个文件夹前面六个字符一样,后面的数字类推为2,此处的~为省略的意思。

 %~dp0 这个不能单独看~,而是%~为一组,是扩充一个变量的表示,%~dp0表示把当前路径扩充为一个驱动器号+路径,d是驱动器号的意思,p是路径的意思,这里的0是当前路径的意思。

 

2、c语言中 文件路径\和\\有什么区别吗

在计算机C语言编码中,反斜杠“\"是有特殊意义的。反斜杠表示一个转义字符单个斜杠不能使用,必须组合来用,详情可以百度百科。转义字符与其后的信息组合使得后面的信息不再是原有的意思,如:\n表示换行 \t表示一个TAB键。

如果想表示真正的一个反斜杠,必须采用\\的方式来显示。\\ 就用\\\\。

windows下文件路径是用\分隔的,比如C:\Windows\System32\就是一个标准的windows路径。

在C语言中,文件路径会被写作字符串形式,但是由于C语言的字符串规则中,\字符是转义字符的引导,所以直接写"C:\Windows\System32\"会出错。而字符'\\'才是表示\。

于是在写路径的时候,就必须是"C:\\Windows\\System32\\"即,写成单独的\的,是windows的标准形式,而写成\\的,才是C语言中用到的形式。

 3、Server.MapPath()
~/App_Data/em_basic_info.accdb 

输入到Microsoft Access 数据库文件(*.MDB)的相对路径,或选择"浏览"在计算机上定位文件。




有关Server.Mappath详细接触http://www.jb51.net/article/5897.htm

 Server.MapPath可以取得网站虚拟目录下某个文件夹下某个文件磁盘路径。获得的路径都是服务器上的物理路径,也就是常说的绝对路径。

网站和虚拟目录是两个概念!!!!!!!!!

目的(自己理解):网站(或者虚拟目录)—转换为—>物理路径

 

Server.MapPath()

 ./当前目录

/网站主目录

../上层目录

~/网站虚拟目录

 

如果当前的网站目录为E:\wwwroot   应用程序虚拟目录为E:\wwwroot\company 浏览的页面路径为E:\wwwroot\company\news\show.asp

在show.asp页面中使用

Server.MapPath("./")   返回路径为:E:\wwwroot\company\news

Server.MapPath("/")    返回路径为:E:\wwwroot

Server.MapPath("../")   返回路径为:E:\wwwroot\company

Server.MapPath("~/")   返回路径为:E:\wwwroot\company

server.MapPath(request.ServerVariables("Path_Info"))

Request.ServerVariables("Path_Translated") 

上面两种方式返回路径为 D:\wwwroot\company\news\show.asp

 MapPath 方法不检查返回的路径是否正确或在服务器上是否存在。

因为 MapPath 方法只映射路径而不管指定的目录是否存在,所以,您可以先用 MapPath 方法映射物理目录结构的路径,然后将其传递给在服务器上创建指定目录或文件的组件。

Server.MapPath( Path )

 参数path

指定要映射物理目录的相对或虚拟路径。若 Path 以一个正斜杠 (/) 或反斜杠 (\) 开始,则 MapPath 方法返回路径时将 Path 视为完整的虚拟路径。若 Path 不是以斜杠开始,则 MapPath 方法返回同 .asp 文件中已有的路径相对的路径。

MapPath 方法不支持相对路径语法 (.) 或 (..)。例如,下列相对路径 ../MyDir/MyFile.txt 返回一个错误。

 

c#中:

System.Web.HttpContext.Current.Server.MapPath("")只能用Web程序中。

winform用Application.StartupPath与Application.ExecutablePath之类的,System.Environment.CurrentDirectory可以。

启动路径才是真正的路径,你的源码根目录获取了没意义,因为程序发布出去没有源码,只有可执行文件和dll,只有启动路径,所以你调试的时候,应该把所需文件扔到bin\debug\下面,而不是源码的根目录。

 

 

一、使用OleDbConnection对象连接OLE DB数据源

1.连接Access 数据库

Access 2000: “provider=Microsoft.Jet.Oledb.3.5;Data Source=Access文件路径”

Access 2003: “provider=Microsoft.Jet.Oledb.4.0;Data Source=Access文件路径”

Access 2007: “provider=Microsoft.Ace.Oledb.12.0;Data Source=Access文件路径”

备注:Access数据库只提供两个连接属性provider(数据提供程序)和data source(数据源);

Access2000\2003的文件格式是“.mdb”,,Access2007的文件格式是“.accdb”

 Access的数据提供程序版本是向下兼容的,在Win7下测试使用Microsoft.Jet.OLEDB.3.5提示“未在本地计算机上注册“Microsoft.Jet.OLEDB.3.5”提供程序。”,改用Microsoft.Jet.OLEDB.4.0或者Microsoft.Ace.OLEDB12.0完全可以访问Access2000的数据库文件。当然也可以尝试使用微软提供的MDAC 来修改provider的版本。

2.连接Excel数据库

Excel 2003: “provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access文件路径;extended properties=excel 8.0”

Excel 2007: “provider=Microsoft.Ace.OLEDB.12.0;Data Source=Access文件路径;extended properties=excel 12.0”

备注:在代码中引用工作表时,应将表名表示为“[工作表名$]”,遇到字段为数据库保留关键字时,给该字段名加上[ ]以示区别,如定义select 语句时:string connStr=”select * from [login$] where username=’abc’ and [password]=’abc123’ ”;

如果在数据表中用数字作为文本类型数据时,则应在数字前加单引号将默认的数值强行设定为文本类型。

 

 3.连接SQL Server数据库

provider=SQLOLEDB;  Data Source=服务器名;  Initial Catalog=数据库名;  uid=用户;  pwd=密码

C#中 Server.MapPath 方法的几个注意点 - [开发记录,清晰]

http://blog.csdn.net/gaotongzhao/article/details/6717055

二、使用SqlConnection对象连接SQL Server数据库

声明:以下连接的属性都可以参考“SQL Server 数据库连接字符串参数一览表”取它的别名;除了必须设置的属性以外还可以设置其他辅助的属性。如Connect Timeout、Encrypt等

设置数据库文件路径的方法:

1.使用绝对路径:“AttachDbFilename=D:\\Solution1\\Web\\App_Data\\data.mdf”

2.使用服务器相对路径:“AttachDbFilename=”+Server.MapPath(“\\App_Data\\data.mdf”)

3.使用最简单的相对路径:“AttachDbFilename=|DataDirectory|\\data.mdf”

推荐使用第3种方式,“|DataDirectory|”代表ASP.NET项目里自动创建的App_Data文件夹

1.以SQL Server验证模式连接SQLServer

(1)以数据库名连接方式

Server=服务器名;  Database=数据库名称;  User ID=用户名;  Password=密码 或者(使用缩写与别名)

Server=服务器名;   Initial Catalog=数据库名称;  Uid=用户;  Pwd=密码

(2)以数据库文件完整路径连接方式

“Serve=服务器名;AttachDbFilename=数据库文件路径;User ID=用户名;Password=密码”

示例:

Server=.\SQLEXPRESS; Database=DatabaseName; User ID =sa; Password=abc123”  Server=.\SQLEXPRESS; Initial Catalog =DatabaseName; Uid =sa; Pwd=abc123”  Server=(local)\SQLEXPRESS;

AttachDbFilename=D:\\Solution1\\Web\\App_Data\\data.mdf;User ID =sa; Password=abc123”

备注:密码可以为空。

2.以Windows 验证模式连接SQL Server

(1)以数据库名连接方式

Server=服务器名;  Database=数据库名称;  Integrated Security=SSPI

 (2)以数据库文件完整路径连接方式

“Serve=服务器名;AttachDbFilename=数据库文件路径; Integrated Security=true”

示例:

Server=服务器名;  Database=数据库名称;  Integrated Security=SSPI  Server=(local)\SQLEXPRESS;   AttachDbFilename=D:\\Solution1\\Web\\App_Data\\data.mdf;  Integrated Security=true” 备注:SSPI即为true

三、使用OdbcConnection对象连接ODBC数据源

“Driver=数据库提供程序名;Server=服务器名; Database=数据库名;Trusted_Connection=yes”

示例:

首先要在计算机管理à数据源à配置好相对应的数据源(选择数据库类型,设置数据库文件路径与相对应的数据库名)

Driver= Microsoft.Jet.OLEDB.4.0;  Server=.\SQLEXPRESS;   Database=DatabaseName;  Trusted_Connection=yes

 四、使用OracleConnection对象连接Oracle数据库

Data Source=Oracle8i;  Integrated Security=yes

 

ASP.NET连接ACCESS数据库web.config内相对路径写法 

http://blog.163.com/fan_yishan/blog/static/4769221320138192021582/

 

 

 

  

 

 

asp.net中的数据连接语句

术语:
 
ODBC:开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

http://www.w3school.com.cn/ado/ado_intro.asp

ADO 被用于从网页访问数据库。


您应当具备的基础知识

在继续学习之前,您需要对下面的知识有基本的了解:
WWW、HTML 以及对网站构建的基本了解
ASP(动态服务器页面)
SQL(结构化查询语言)

如果您希望首先学习这些项目,请在我们的 首页 访问这些教程。


什么是 ADO?

ADO 是一项微软的技术
ADO 指 ActiveX 数据对象(ActiveX Data Objects)
ADO 是一个微软的 Active-X 组件
ADO 会随微软的 IIS 被自动安装
ADO 是一个访问数据库中数据的编程接口


从 ASP 页面访问数据库

从一个 ASP 页面内部访问数据库的通常的方法是:
创建一个到数据库的 ADO 连接
打开数据库连接
创建 ADO 记录集
从记录集提取您需要的数据
关闭记录集
关闭连接

 
 
 
OLE DB(OLEDB),(Object Linking and Embedding,Database,又称为OLE DB或OLE-DB)对象链接与嵌入数据库。 http://baike.baidu.com/link?url=lXuxFyW4vr09pVYBDnBnvUa4mBJ-4GiCjcJMc0_E655B203OAvC-71qQJynEoBEoeG5eN3_cR3qFtJyQx24Z0q 是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。OLE DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。
OLEDB,一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像)

组成编辑
OLEDB标准中定义的新概念----OLEDB将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称。例如:数据提供者(Data Provider)是指提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。
我们要开启如Access 数据库中的数据,必须用ADOT 透过OLEDB 来开启。AT 利用OLEDB 来取得数据,这是因为OLEDB 了解如何和许多种数据源作沟通,所以对OLEDB有相当程度的了解是很重要的。OLEDB 为一种开放式的标准,并且设计成COM(ComponentObject Model,组件对象模型,一种对象的格式。凡是依照COM 的规格所制作出来的组件,皆可以提供功能让其它程序或组件所使用。)组件。OLE
DB 最主要是由三个部分组合而成:

  1.Data Providers 数据提供者
凡是透过OLEDB 将数据提供出来的,就是数据提供者。例如SQL Server 数据库中的数据表,或是附文件名为mdb 的Access 数据库档案等,都是Data Provider。
⒉Data Consumers 数据使用者
凡是使用OLEDB 提供数据的程序或组件,都是OLEDB 的数据使用者。换句话说,凡是使用ADO 的应用程序或网页都是OLE DB 的数据使用者。
⒊Service Components 服务组件
数据服务组件可以执行数据提供者以及数据使用者之间数据传递的工作,数据使用者要向数据提供者要求数据时,是透过OLEDB 服务组件的查询处理器执行查询的工作,而查询到的结果则由指针引擎来管理。

 

 

不可识别的数据库格式
AccessDataSource的使用,一行代码实现增删改http://blog.csdn.net/u013214705/article/details/29559467
自定义数据库连接类
using System.Data.OleDb;
///

/// Class1 的摘要说明

///

public class superConn

{

private OleDbConnection cnn;

private OleDbCommand cmd;

private OleDbDataReader datar;

public superConn(string mdbFileName)

{

string _path = "~\\App_Data\\" + mdbFileName;
string str_conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

+ System.Web.HttpContext.Current.Server.MapPath(_path);

cnn = new OleDbConnection(str_conn);

// TODO: 在此处添加构造函数逻辑

}
注意红色部分OLEDB.4.0;Data Source中间是分号!
问题:不可识别的数据库格式 'C:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Data\userInfo.accdb'。如下:
“/”应用程序中的服务器错误。
不可识别的数据库格式 'C:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Data\userInfo.accdb'。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 不可识别的数据库格式 'C:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Data\userInfo.accdb'。

源错误:

行 20: public void open()
行 21: {
行 22: cnn.Open();
行 23: }
行 24: public void close()

源文件: c:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Code\MyConn.cs 行: 22

将accdb数据库格式改为mdb格式,问题解决!!!!!
解决Access连接 accdb 不可识别的数据库格式异常http://blog.csdn.net/liuyukuan/article/details/50487474
变为如下提示:





u-pwd

说明:执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息:System.IndexOutOfRangeException: u-pwd

源错误: 

行 29: if (dr.Read()) 行 30: { 行 31: if (dr["u-pwd"].ToString() == userID) 行 32: isLogin = true; 行 33: }

源文件:c:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Code\MyClasses.cs 行:31 

堆栈跟踪: 

[IndexOutOfRangeException: u-pwd] System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +1747146 System.Data.OleDb.OleDbDataReader.GetOrdinal(String name) +68 System.Data.OleDb.OleDbDataReader.get_Item(String name) +16 newClasses.superUserInfo.tryLogin() in c:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\App_Code\MyClasses.cs:31 login_Default.btn_login_Click(Object sender, EventArgs e) in c:\Users\Administrator\Documents\Visual Studio 2015\WebSites\WebSite1\login\login.aspx.cs:15 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9696694 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639

问题找到:
MyClasses.cs中,与数据库中字段不符。
public Boolean tryLogin()

{

isLogin = false;

superConn sconn = new superConn("userInfo.mdb");

sconn.open();

string _sql = "select * from t_userinfo where u_userid='" + userID + "'";

OleDbDataReader dr = sconn.GetDataReader(_sql);

if (dr.Read())

{
if (dr["u-pwd"].ToString() == userID)

isLogin = true;

}
将 if (dr["u-pwd"].ToString() == userID)改为 if (dr["u_pwd"].ToString() == userID)

一切正常!!
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: