从控制台应用程序访问SQL Server

4

我有一个简单的控制台应用程序,连接到SQL Server数据库。然而,在运行时它会抛出以下错误。有什么线索吗?

Unhandled Exception: System.Data.SqlClient.SqlException: Cannot open database "Database" requested by the login. The login failed.
Login failed for user 'MYDOMAIN\MYUSERID'.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, BooleanignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)

我使用的是SQL Server 2005 Express Edition。 然而,我可以通过Database Explorer从Visual Web Developer连接到SQL Server。 下面是我使用的代码:

using System;
using System.Data;
using System.Data.SqlClient;

    public class Test
    {
        public Test()
        {

        }
        static void Main()
        {
            Console.WriteLine("hello");
            string connectionString = "Data Source=localhost\\SQLEXPRESS;Database=Database;Integrated Security=true";
            SqlConnection conn = new SqlConnection(connectionString);
            conn.Open();
            Console.WriteLine("done");
        }
    }
5个回答

3

控制台应用程序可以与SQLExpress数据库轻松通信。我认为您只需要通过管理工具配置访问您的域帐户即可。显然,Web开发人员应用程序正在使用ASPNET帐户,该帐户具有不同的域凭据。


有什么解决方法吗?安装新软件会有延迟(企业网络)。我如何使用ASPNET帐户而不是集成安全性? - Rejeev Divakaran

1
这意味着您的登录没有访问该数据库的权限。

1
请在 app.config 文件中验证 "connectionstring" 属性的密码是否正确。
我曾经遇到过和你一样的问题,而我的密码是空的。我不知道为什么。

0

如果您正在运行Vista,则可能是因为Visual Web Developer在特权帐户(例如管理员)下运行。这样做是为了让您开发和调试应用程序。管理员帐户包含在MSSQL的管理员组中。您的控制台应用程序在您的帐户下运行,该帐户没有连接到MSSQL的权限。


0
我猜测您可能在Web开发和.NET应用程序之间使用了不同的协议。 作为一个快速测试,您可以启动Sql Server配置管理器,并在网络配置下启用每个协议。您还可以检查/更改该配置工具中SQL本机客户端的客户端协议。它们默认都应该启用共享内存,但最好再次确认。
http://msdn.microsoft.com/en-us/library/ms345154.aspx

网络支持

对于SQL Server Express,默认情况下只有本地计算机上的共享内存连接类型可访问,尽管用户可以显式打开其他支持的协议,如TCP/IP和命名管道。

我假设这是SQL Server的本地安装,而不是通过网络进行的,对吗?

是的,控制台应用程序和SQL Server正在同一台机器上运行。 - Rejeev Divakaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接