Tad*_*dej 17 sql-server sql-server-2008 dapper .net-core asp.net-core-2.0
UPDATE
我永远无法使用"Windows身份验证"(域)用户进行此操作.但是使用"SQL Server身份验证"用户,一切都像它应该的那样工作.
原始问题
我的connectionString: Server=ip;Database=dbname;User Id=xxx\user;Password=pass;
连接字符串位于appsettings.json中,如下所示:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"ConnectionString": "Server=ip;Database=dbname;User Id=xxx\user;Password=pass;"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将它传递给"Startup.cs"文件中的静态类,如下所示:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
Orm.DatabaseConnection.ConnectionString = Configuration["ConnectionStrings:ConnectionString"];
}
Run Code Online (Sandbox Code Playgroud)
这是我发起连接的地方:
using System.Data.SqlClient;
namespace MyProject.Orm
{
public static class DatabaseConnection
{
public static string ConnectionString { get; set; }
public static SqlConnection ConnectionFactory()
{
return new SqlConnection(ConnectionString);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
public string Get()
{
using (var databaseConnection = Orm.DatabaseConnection.ConnectionFactory())
{
var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
return sections.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
这条线在哪里:
var databaseConnection = Orm.DatabaseConnection.ConnectionFactory();
Run Code Online (Sandbox Code Playgroud)
收益:
ServerVersion: "'databaseConnection.ServerVersion' threw an exception of type 'System.InvalidOperationException'"
Message: "Invalid operation. The connection is closed."
Source: "System.Data.SqlClient"
StackTrace: "at
System.Data.SqlClient.SqlConnection.GetOpenTdsConnection()\n
at
System.Data.SqlClient.SqlConnection.get_ServerVersion()"
Run Code Online (Sandbox Code Playgroud)
我得到这个错误new SqlConnection:"error CS0119: 'SqlConnection' is a type, which is not valid in the given context".
但由于这些错误,程序执行不会停止.
然后该应用程序挂起在以下行:
var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
Run Code Online (Sandbox Code Playgroud)
我正在使用Dapper作为我的ORM(不是EntityFramework).在"myTable"中,sql表只有17行和5列,因此它应该加载快速.
我尝试了各种不同的connectionStrings,但总是失败.如果我尝试使用.NET Framework 4.5,一切正常.问题是.NET Core 2.0.
任何关于修复它的想法都是受欢迎的 因为我已经花了太多时间在这上面.
尝试添加databaseConnection.Open().
public string Get()
{
using (var databaseConnection = new SqlConnection(@"Server=ip;Database=dbname;User Id=xxx\user;Password=pass;Pooling=false;"))
{
databaseConnection.Open();
var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
return sections.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
要避免在注释中描述的连接池问题,请添加Pooling=false;到连接字符串:
Server=ip;Database=dbname;User Id=xxx\user;Password=pass;Pooling=false;
编辑:我硬编码连接字符串并删除工厂以使示例更小