【问题标题】:Retrieve Table data from SQL DB using an Assembly使用程序集从 SQL DB 中检索表数据
【发布时间】:2021-07-01 20:08:03
【问题描述】:

好吧,所以我使用 C# 创建了一个我在 SSMS 中使用的 DLL 并将其作为程序集附加以执行一些任务,我可以很好地创建/使用 DLL,但我无法从 DLL 访问数据库拉数据。如果我在 C# 中创建一个表单来访问数据,我会做这样的事情

  public class Gaps
{

    public static void Find_Gaps1()
    {
        SqlConnection connection = new SqlConnection("Server = DIS; Database = dyn35;  Integrated Security = true");
        DataTable FinishDT = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter();
        String SQLstatement = "SELECT [new_cust] FROM [Dyn35].[dbo].[Account] WHERE [new_cust] IS NOT NULL AND ISNUMERIC([new_cust]) = 1 ORDER BY [new_cust]";
        connection.Open();
        SqlCommand command = new SqlCommand(SQLstatement, connection);
        command.CommandTimeout = 0;
        adapter.SelectCommand = command;
        adapter.Fill(FinishDT);
        connection.Close();
    }

}

然后我可以轻松地操作数据表中的数据。我不能作为 DLL 执行此操作,因为它会引发错误,说明我不能。有人知道如何使用 t-sql 将数据从查询发送到 DLL 吗?或者指出我正确的方向?我正在创建的存储过程位于我尝试访问的同一个数据库中。

【问题讨论】:

  • 您很可能遇到了凭据问题。 dll 是否在构建代码的同一台机器和同一用户帐户上使用?两件事之一是错误的 1) 用户不同并且无权访问数据库 2) 您在具有不同版本的 Net 的不同机器上安装了代码。当 Net 应用程序安装在另一台机器上时,相同版本的 Net 必须在部署机器上,或者您需要使用 setup.exe 发布和安装。 Net 库使用 Windows dll,setup.exe 更新部署机器中的 windows dll,因此 Net 应用程序将运行。

标签: c# sqlclr


【解决方案1】:

是的,我相信这是一个凭证问题 jdweng,一旦我设置了 sql 连接上下文 connection = true,它就可以正常运行了!

SqlConnection connection = new SqlConnection("context connection = true");

【讨论】:

  • 这根本不是凭证问题。 "context connection = true" 仅适用于 SQLCLR 程序集,用于连接到部署程序集的服务器。您没有说您有 SQLCLR 程序集。您发布的代码也不应该在 SQLCLR 程序集中使用。仅在 SQL Server 的内存中加载一些数据会浪费大量内存。鉴于服务器已经缓存了数据,这最终会加载数据两次而没有任何好处。
  • 你想做什么,为什么要使用 SQLCLR?
猜你喜欢
  • 2020-09-23
  • 2020-01-23
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2016-06-12
  • 2011-04-12
  • 2016-04-04
相关资源
最近更新 更多