【发布时间】:2016-12-15 14:33:47
【问题描述】:
我正在使用 Visual Studio 在 C# 中制作我的第一个 ASP.net 应用程序,并且我有一个可用的开发版本。创建单独的生产数据库后,我使用 Windows 资源管理器复制整个开发项目文件夹。生产版本中的生产文件夹名称和 .sln 文件名都已更改。
不过,现在,生产 .edmx 文件的模型浏览器在存储过程/函数下什么也没有显示,即使复杂类型和函数导入仍然存在,也找不到要导入或更新的存储过程。这是在将Web.config 连接字符串指向生产数据库服务器(包括id 和密码)之后,并通过Server Explorer 添加并测试成功的数据连接。每当测试生产应用程序时,还有一个 SQLException Login failed for user 'databaseuser'. 其中 databaseuser 是 Web.config 连接字符串中的 id。
有人知道如何将复制的生产项目连接到数据库服务器吗?非常感谢!
Web.config 连接字符串:
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlClient"
connectionString="Server=[production server];Database=UserDatabase;
User ID=databaseuser;Password=[production password];Trusted_Connection=False;
Connection Timeout=30;" />
<add name="WorkDatabaseEntities" connectionString="metadata=[metadata copied from
working development version];provider=System.Data.SqlClient;
provider connection string="data source=[production server];
initial catalog=WorkDatabase;integrated security=False;user id=databaseuser;
password=[production password];multipleactiveresultsets=True;
application name=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="UserDatabaseEntities" connectionString="metadata=[metadata copied from
working development version];provider=System.Data.SqlClient;provider
connection string="data source=[production server];
initial catalog=UserDatabase;integrated security=False;user id=databaseuser;
password=[production password];connect timeout=30;MultipleActiveResultSets=True;
App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
编辑 1
.edmx 文件中的模型浏览器现在显示存储过程。 “databaseuser”对 WorkDatabase 具有读写权限,但在 Securables 下没有 dbo Schema。
编辑 2
这里有一点堆栈跟踪:
[SqlException (0x80131904): Login failed for user 'databaseuser'.]
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +347
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +191
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +154
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +21
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +141
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +362
System.Data.SqlClient.SqlConnection.Open() +96
编辑 3
堆栈跟踪似乎在两个不同的跟踪之间交替。这说明什么?
[SqlException (0x80131904): Login failed for user 'databaseuser'.]
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling) +970
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +802
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +38
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +682
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +89
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +426
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +191
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +154
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +21
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +141
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +362
System.Data.SqlClient.SqlConnection.Open() +96
编辑 4
服务器托管在 AWS 上。也许这是 AWS 特有的东西?
【问题讨论】:
-
你有没有禁止本地机器访问生产数据库的数据库服务器防火墙规则
-
感谢您的回复!我认为没有任何防火墙问题。
-
如果您克隆了数据库和项目,则没有任何要导入的内容。您只需将连接字符串更改为指向生产或开发,您就可以开始了。假设它们是克隆
-
@JamieD77 - 没有要导入的新存储过程,但存储过程甚至没有出现在“.edmx”文件中。另外,无论何时测试生产版本,即使服务器资源管理器说服务器已连接,也会出现 SQLException。
-
连接可能没有问题,如果它在ssms中连接,它应该在VS中工作。顺便说一句,可以尝试重新启动 VS 并清除临时 asp.net 文件。也许我们在 VS2013 中注意到的 VS 缓存问题
标签: c# asp.net sql-server asp.net-mvc amazon-web-services