首页 > 解决方案 > Sap.Data.SQLAnywhere.SAException:使用 .NET 连接到 Sybase SQL Anywhere 时找不到语言资源文件 (dblgen17.dll)

问题描述

我正在尝试使用Sap.Data.SQLAnywhere建立与 Sybase 数据库的连接。在工作站上使用 SQL Anywhere 客户端可以完美运行,但在 Azure 函数中运行代码时遇到了一些问题。

这是我的简单代码的开始:

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using System.Data.SqlClient;
using Microsoft.Extensions.Logging;
using System;
using Sap.Data.SQLAnywhere;

namespace SBCTest
{
    public static class SybaseTest
    {
        static string DB_CS_SOURCE = "Host=myIP;UID=myUID;PWD=myPWD;Data Source=myDb;";         static int bulkSize = 5000;

        [FunctionName("SybaseTest")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, ILogger log)
        {
            try
            {
                var dbSourceCon = new SAConnection()
                dbSourceCon.ConnectionString = DB_CS_SOURCE;
                dbSourceCon.Open();

 //etc... etc...

我面临的问题是我在运行应用程序时遇到的以下错误,我似乎无法管理:

[Error] System.TypeInitializationException: The type initializer for 'Sap.Data.SQLAnywhere.SAConnection' threw an exception. ---> Sap.Data.SQLAnywhere.SAException: Cannot find the language resource file (dblgen17.dll).
   at Sap.Data.SQLAnywhere.SAUnmanagedDll..ctor()
   at Sap.Data.SQLAnywhere.SAUnmanagedDll.get_Instance()
   at Sap.Data.SQLAnywhere.SAConnection..cctor()
   --- End of inner exception stack trace ---
   at Sap.Data.SQLAnywhere.SAConnection..ctor()
   at SBCTest.SybaseTest.<Run>d__3.MoveNext()

dblgen17.dll包含在此处的SAP SQL Anywhere 数据库客户端中,并已添加到我的项目中,其中Build Action设置为NoneCopy to Output Directory设置为Copy Always

正如预期的那样,“丢失的文件” dblgen17.dll与Sap.Data.SQLAnywhere.v4.5.dll一起发布后可以在/site/wwwroot/bin中找到。

为什么它仍然说它不见了?我的谷歌结果告诉我它可能与 PATH 变量有关,但由于这是一个 Azure 函数,我不确定在这里做什么。我还注意到了一个额外的奇怪行为,如下所述。

有时,偶尔在重新发布未更改的代码时,我也会突然收到以下错误消息:

[Error] Sap.Data.SQLAnywhere.SAException (0x80004005)
at Sap.Data.SQLAnywhere.SAConnection.Open()
at SBCTest.SybaseTest.<Run>d__3.MoveNext()

如何让我的代码识别文件,并希望连接成功?

标签: sapazure-functionssybasesqlanywhere

解决方案


就我而言,它是通过重置 IIS 来解决的,这可以通过 cmd 使用iisreset命令来完成。


推荐阅读