我写了一个asp.net的程序,是关于数据库连接的。代码如下:
<%@ Page Language="vb" Debug="true" %>
<%@ Import NameSpace="System.Data" %>
<%@ Import NameSpace="System.Data.OleDb" %>
<script Language="VB" RunAt="Server">
Function Get_DSN(bolSQL As Boolean) As String
  '--- bolSQL: True for SQL Server, False for Access ---
  If Not bolSQL Then   'Access
     Get_DSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
             & Server.MapPath("asp_net.mdb")
  Else  'SQL Server
     Get_DSN = "Provider=SQLOLEDB.1;Data Source=Alvinnt;User ID=sa;" _
             & "Password=;Initial Catalog=ASP_Net;autotranslate=no;"
  End If
End Function
Sub Check_ID()
  '--- 目的:检查 ID 是否已存在 ---
  Dim strSQL, uid As String
  Dim bolExist As Boolean
  '---
  Dim strDSN As String
  Dim objConn As OleDbConnection
  Dim objCmd As  OleDbCommand
  Dim objRead As OleDbDataReader
  '---
 uid="Leo"
'--- 产生SQL语句 ---
  strSQL = "select * from password1 where userid='" & uid & "'"
  '--- Step 1:创建OleDb Connection,然后打开Access数据库 ---
  strDSN = Get_DSN(False)
  objConn = New OleDbConnection(strDSN)
  '--- 
  objCmd = New OleDbCommand(strSQL, objConn)
  objCmd.Connection.Open()  '打开Connection
  '--- Step 2:执行SQL命令,并将结果保存于OleDbDataReader中 ---
  objRead = objCmd.ExecuteReader()  '--- Step 3:判断是否为注册的帐号
  bolExist = False
  While objRead.Read()
     bolExist = True  '帐号正确
  End While
  objRead = Nothing
  '--- Step 4:关闭OleDbConnection 
  'objcmd.connection.close()
objConn.Close()
  objConn = Nothing
  '---
  If bolExist Then   'ID已存在
     Response.Write("<br><center><h1>" & vbCrLf)
     Response.Write("<hr>Sorry~~~<p>" & vbCrLf)
     Response.Write("本ID(<font color=red>" & uid)
     Response.Write("</font>)已被另一人注册,请改用其他ID!")
     Response.Write("</p></h1><hr>" & vbCrLf)
     Response.Write("<a href='javascript:history.back()'>")
     Response.Write("回前一画面</a>" & vbCrLf)
     Response.Write("</center>" & vbCrLf)
  Else
     '--- 定向到15-02.aspx准备发送“确认信函” ---
     'Server.Transfer("15-02.aspx")
  Response.Write("成功")
End If
End Sub
</script>
<%
  Check_ID()
%>

解决方案 »

  1.   

    错误信息如下:
    未指定的错误 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误源错误: 
    行 31:   '--- 
    行 32:   objCmd = New OleDbCommand(strSQL, objConn)
    行 33:   objCmd.Connection.Open()  '打开Connection 此处用了红色标记,也就是关于这句错了
    行 34:   '--- Step 2:执行SQL命令,并将结果保存于OleDbDataReader中 ---
    行 35:   objRead = objCmd.ExecuteReader()
     源文件: E:\text3\ceshishujuku.aspx    行: 33 堆栈跟踪: 
    [OleDbException (0x80004005): 未指定的错误]
       System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20
       System.Data.OleDb.OleDbConnection.InitializeProvider() +57
       System.Data.OleDb.OleDbConnection.Open() +203
       ASP.ceshishujuku_aspx.Check_ID() in E:\text3\ceshishujuku.aspx:33
       ASP.ceshishujuku_aspx.__Render__control1(HtmlTextWriter __output, Control parameterContainer) in E:\text3\ceshishujuku.aspx:65
       System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +27
       System.Web.UI.Control.Render(HtmlTextWriter writer) +7
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +241
       System.Web.UI.Page.ProcessRequestMain() +1897 错误提示是 行 33:   objCmd.Connection.Open()  '打开Connection 此处用了红色标记,也就是关于这句错了。 但这没错,这是书上光盘的代码,请给位赐教~~,并送上30分,谢谢!~~
      

  2.   

    你的数据库文件asp_net.mdb是否存在,是不是和页面文件在同一文件夹下?
      

  3.   

    存在啊,是放在ceshishujuku.aspx的同一个文件夹下(text3)
      

  4.   

    看看Server.MapPath("asp_net.mdb")返回的是什么地址
      

  5.   

    返回的是 E:\text3\asp_net.mdb是和ceshishujuku.aspx在同一个文件夹里。
      

  6.   

    先用objConn.Connect();再执行命令对象。
      

  7.   

    re freewzf1919 这个我也试过了同样是 System.Data.OleDb.OleDbException: 未指定的错误
    objConn.Connect();显示红色。有人知道吗?大家发挥的智慧,谢谢~~
      

  8.   

    连接串
    "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source="  & Server.MapPath("asp_net.mdb")
      

  9.   

    re aero_boy 试了你的连接串没用~~,错误还是同样的
      

  10.   

    你直接用.net里面的连接器连接试试
      

  11.   

    用.net里面的连接器连接,可以连接成功.但是我把oledbconnection中的connectionstring中的内容拷到Get_DSN =的后面就不行,错误还是一样,未知错误,难道就没有人能解决吗?等待中~~~
      

  12.   

    Server.MapPath()是相对当前目录的.如果你在根目录访问下级目录很方便比如Server.MapPath(@"xxx")如果你在下级目录.即便访问同级目录也要加上Server.MapPath(@"../xxx");
      

  13.   

    to kkeemmgg 我把代码改为如下:
     Get_DSN="Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=E:\text3\asp_net.mdb;" 结果也是一样的错误,这个路径是绝对没错的.
      

  14.   

    你的mdb是不是只读的?改成可写的看看。
      

  15.   

    问题可能就出在这里,我的mdb是只读的,但杂一属性里改不成可写的.我的系统是winxp的,请问要怎么改成可写?
      

  16.   

    问题可能就出在这里,我的mdb是只读的,但在属性里改不成可写的.我的系统是winxp的,请问要怎么改成可写?
      

  17.   

    数据库连接语句有问题,我也遇到过。多试试几中连接语句。
    http://www.connectionstrings.com/
      

  18.   

    http://www.connectionstrings.com/
      

  19.   

    re mhsky 我有点不懂你的说法?
    如果是使用read方法来连接数据库(也就是说oledbconnection or oledbcommand需要用open()打开)的话,就会报这样的错误,如果是用其他的方式打开是可以的,但我这里是判断id号是否存在,通过
    While objRead.Read()
         bolExist = True  '帐号正确
      End While
    来判断的,如果用其他方式的话就不能用OleDbDataReader这个对象了.那我要是用其他方式打开,怎么来使代码与While objRead.Read()
         bolExist = True  '帐号正确
      End While
    相似呢?