为什么这段代码会导致错误?

时间:2010-07-16 04:54:50

标签: asp.net ado.net connection sqlclient

我一直在寻找如何连接到本地SQL数据库的时间。我简直不敢相信这很困难。无论如何,我认为我使用此代码更加正确。

<%
    Dim myConnection as System.Data.SqlClient.SqlConnection
    Dim myCommand as System.Data.SqlClient.SqlCommand

    myConnection = New System.Data.SqlClient.SqlConnection("Data Source=localhost;Initial Catalog=dbtest;Integrated Security=True")
    myConnection.Open()
%>

然而,它仍然无效。我不知道从哪里开始,因为我在页面加载时也会收到此消息:

运行时错误

说明:服务器上发生应用程序错误。此应用程序的当前自定义错误设置可防止远程查看应用程序错误的详细信息(出于安全原因)。但是,它可以由运行在本地服务器计算机上的浏览器查看。

详细信息:要在远程计算机上查看此特定错误消息的详细信息,请在位于当前Web根目录中的“web.config”配置文件中创建标记应用。然后,此标记应将其“mode”属性设置为“Off”。

我创建了一个web.config文件,它没有改变任何东西。我迷路了。任何帮助表示赞赏!

  

堆栈跟踪:[SqlException   (0x80131904):无法打开数据库   登录请求“dbtest”。该   登录失败。用户登录失败   'IIS APPPOOL \ DefaultAppPool'。]
  System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)   +6244425 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj)+245
  System.Data.SqlClient.TdsParser.Run(RunBehavior   runBehavior,SqlCommand cmdHandler,   SqlDataReader dataStream,   BulkCopySimpleResultSet   bulkCopyHandler,TdsParserStateObject   stateObj)+2811
  System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(布尔   enlistOK)+53
  System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo   serverInfo,String newPassword,   Boolean ignoreSniOpenTimeout,Int64   timerExpire,SqlConnection   拥有对象)+248
  System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(字符串   host,String newPassword,Boolean   redirectedUserInstance,SqlConnection   owningObject,SqlConnectionString   connectionOptions,Int64 timerStart)   +6260362 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection)   owningObject,SqlConnectionString   connectionOptions,String newPassword,   Boolean redirectedUserInstance)   +6260328 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity)   identity,SqlConnectionString   connectionOptions,Object   providerInfo,String newPassword,   SqlConnection owningObject,Boolean   redirectedUserInstance)+354
  System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions   options,Object poolGroupProviderInfo,   DbConnectionPool池,DbConnection   拥有连接)+703
  System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(的DbConnection   owningConnection,DbConnectionPool   pool,DbConnectionOptions选项)+54   System.Data.ProviderBase.DbConnectionPool.CreateObject(的DbConnection   拥有对象)+6261592
  System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(的DbConnection   拥有对象)+81
  System.Data.ProviderBase.DbConnectionPool.GetConnection(的DbConnection   拥有对象)+1657
  System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection   拥有连接)+88
  System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection   outerConnection,DbConnectionFactory   connectionFactory)+6265031
  System.Data.SqlClient.SqlConnection.Open()   +258 ASP.index_aspx .__ Render__control1(HtmlTextWriter   __w,Control parameterContainer)+71 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter   作家,ICollection孩子们)+115
  System.Web.UI.Page.Render(HtmlTextWriter的   作家)+38
  System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean   includeStagesAfterAsyncPoint)+4240

4 个答案:

答案 0 :(得分:7)

就在这里

  

无法打开数据库“dbtest”   登录请求。登录   失败。用户'IIS登录失败   APPPOOL \默认应用'

App Pool身份帐户在SQL Server中设置,但未在数据库dbtest中设置。如果无法连接到SQL Server实例,则会收到不同的错误消息,但是您正在连接以获取上述错误消息.1

所以,在SQL中:

USE dbtest
GO
CREATE USER [IIS APPPOOL\DefaultAppPool] FROM LOGIN [IIS APPPOOL\DefaultAppPool]

编辑:

当你连接到“数据库”时,你实际上认证了3次(基本上)

  1. 托管SQL Server实例的Windows /域安装(此处超出范围)
  2. 到SQL Server实例,您通过CREATE LOGIN“登录”设置SQL Server
  3. 此登录名称作为“用户”映射到零个或多个数据库,这是您需要在此处执行的操作
  4. 在这种情况下,您在SQL Server中设置为登录,但未在SQL Server实例中托管的目标数据库中设置。

答案 1 :(得分:1)

正确放置CustomError标记和值,如:

<configuration>
    <system.web>
      <customErrors mode="Off"/>
    </system.web>
</configuration>

这会向您公开确切的问题。

答案 2 :(得分:0)

尝试设置数据源=(本地)

答案 3 :(得分:0)

您是否遵循了所有说明并确保web.config中的customerErrors标记如下所示:

<customErrors mode="Off" />

真正的错误似乎是用户ASP.Net正在运行,因为它没有登录数据库的权限。