无法使用.NET Core 2.0连接SQL 2008数据库

17

更新

我无法使用“Windows身份验证”(域)用户实现此操作。但是,如果使用“SQL Server身份验证”用户,则一切都会像预期的那样工作。

原始问题

我的连接字符串: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;"
  }
}

然后我将它传递给一个静态类,来自于 "Startup.cs" 文件,像这样:

那么我将其传递给一个静态类,它位于 "Startup.cs" 文件中,就像这样:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    Orm.DatabaseConnection.ConnectionString = Configuration["ConnectionStrings:ConnectionString"];
}

这是我发起连接的地方:

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);
        }
    }
}

这是我的控制器:

public string Get()
{
    using (var databaseConnection = Orm.DatabaseConnection.ConnectionFactory())
    {
        var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
        return sections.ToString();
    }
}

在这条线上:

var databaseConnection = Orm.DatabaseConnection.ConnectionFactory();

返回:

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()"

我在new SqlConnection处遇到了错误:"error CS0119: 'SqlConnection'是一种类型,在给定的上下文中无效"

但程序不会因为这些错误而停止执行。

然后应用程序在以下行上挂起:

var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();

我正在使用Dapper作为我的ORM(而不是EntityFramework)。在“myTable”SQL表中只有17行和5列,因此它应该加载很快。

我尝试了各种不同的connectionStrings,但它总是失败。如果我在.NET Framework 4.5上尝试相同的操作,则一切正常。问题出在.NET Core 2.0上。

欢迎任何有关修复此问题的想法,因为我已经花费了太多时间。


3
你能百分百确定它是在那一行出错吗?SqlConnection 构造函数不应该对 ServerVersion 属性进行任何操作。如果你试图在关闭的连接上读取 .ServerVersion(如 new SqlConnection("").ServerVersion),就会得到这个错误,我预期这会发生在稍后。请问您需要翻译什么其他内容吗? - Jeroen Mostert
@MikhailLobanov 我已经添加了更多的代码。希望它有所帮助。 - tedi
@JedatKinports 看看这个链接,可能会对你有帮助 https://dev59.com/wpffa4cB1Zd3GeqP_Kk1 - Eid Morsy
ConfigureServices方法中,使用Configuration["ConnectionStrings:RutarConnectionString"]代替Configuration["ConnectionStrings:ConnectionString"]如何?!;) - shA.t
这只是我在尝试隐藏凭据时的一个打字错误等。 :D 这不是问题,在我的项目中是正确的。 :) - tedi
显示剩余25条评论
2个回答

6
尝试添加 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();
    }
}

为了避免评论中描述的连接池问题,您需要在连接字符串中添加 Pooling=false;Server=ip;Database=dbname;User Id=xxx\user;Password=pass;Pooling=false; 编辑: 我硬编码了连接字符串并删除了工厂,以使示例更小。

现在它卡在了:databaseConnection.Open();。但在此之前,如果我设置一些断点,我会在new SqlConnection上收到此错误:“error CS0119: 'SqlConnection' is a type, which is not valid in the given context"。尽管如此,程序执行并不会因为这个错误而停止。 - tedi
@JedatKinports,我只是更改了连接字符串,这不会导致任何编译错误。 - Mikhail Lobanov
你能成功连接吗?你可以分享一下你使用的连接字符串(当然要隐藏凭据)吗?或者如果你能分享一下你在appsettings.json文件中的connectionString是什么样子的也行。感激不尽。 - tedi
@JedatKinports 我的意思是你应该为stackoverflow硬编码你的连接字符串,以使你的示例最小化。我已经编辑了我的答案。 - Mikhail Lobanov
在我的环境中编译没有任何错误。我认为您可能犯了一些错别字错误... - Mikhail Lobanov
显示剩余6条评论

2
尝试创建一个自包含部署,这样应该可以消除任何奇怪的依赖关系问题。如果它能正常工作,那么至少你就知道它是由某些程序集绑定类型问题引起的。
异常 "error CS0119: 'SqlConnection' is a type, which is not valid in the given context" 的错误提示听起来像是这种情况。

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