当前位置: 首页 > 知识库问答 >
问题:

无法将Azure Function App与数据库连接(使用. net core 2.1)

麻宜春
2023-03-14

请注意(环境):函数App:版本2,目标框架:。网络核心2.1

我正在开发一个函数应用程序,它将像Web Api一样工作。这个函数应用程序将返回数据库表中的数据,还将操作Azure存储(Blob)中的文件。但我被卡住了,因为我无法从local.settings创建ConnectionString。json文件。理想情况下,连接字符串应该在默认情况下创建,就像我遵循一些教程一样

以下是我的local.settings.json文件内容:-

    {
  "ConnectionStrings": {
    "mycs": "data source=servername;initial catalog=dbname;user id=XXXX;password=XXXX;MultipleActiveResultSets=True;"
  },
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "mycs": "data source=servername;initial catalog=dbname;user id=XXXX;password=XXXX;MultipleActiveResultSets=True;"
  }
}

以下是我的HttpTrigger文件:

    namespace my_api
    {
        public class myDataContext : DbContext
        {
            public myDataContext() : base(GetConnectionString()) { }
            private static string GetConnectionString()
            {

                const string providerName = "System.Data.SqlClient";
                const string metadata = @"res://*/MYDB.csdl|res://*/MYDB.ssdl|res://*/MYDB.msl";
                try
                {
                    string connectString = ConfigurationManager.ConnectionStrings["mycs"].ToString();


                    // Initialize the connection string builder for the
                    // underlying provider.
                    SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(connectString);

                    // Set the properties for the data source.
                    //sqlBuilder.IntegratedSecurity = true;
                    sqlBuilder.MultipleActiveResultSets = true;

                    // Build the SqlConnection connection string.
                    string providerString = sqlBuilder.ToString();

                    // Initialize the EntityConnectionStringBuilder.
                    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

                    //Set the provider name.
                    entityBuilder.Provider = providerName;

                    // Set the provider-specific connection string.
                    entityBuilder.ProviderConnectionString = providerString;

                    // Set the Metadata location.
                    entityBuilder.Metadata = metadata;

                    return entityBuilder.ConnectionString;
                }
                catch { }

                var connectionstring = Environment.GetEnvironmentVariable("mycs");
                return connectionstring;
            }

            public DbSet<flowerset> flowersets
            {
                get;
                set;
            }
        }
    }

以下是以下代码:

namespace my_api

{ 公共静态类 helpService { [FunctionName(“helpService_get”)] 公共静态异步任务

        try {
            int page = 0;
            int pageSize = 20;

            myDataContext entity = new myDataContext();
            if (page == 0 && pageSize == 0)
            {
                return entity.helpsets.ToList();
            }
            if (pageSize <= 0) { pageSize = 20; }
            entity.helpsets.OrderByDescending(x => x.id).Skip((page - 1) * pageSize).Take(pageSize).ToList();
        }
        catch (Exception exx) {
            log.LogInformation("Exception changed (helpService_get): "+exx.Message);
        }
        return null;
    }

}//End of Class
}//End of Namespace

我在entity.helpsets行中遇到以下错误。OrderByDescending(x=

Unable to determine the provider name for provider factory of type 'System.Data.SqlClient.SqlClientFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.

共有1个答案

施德元
2023-03-14

根据我的测试,我们可以使用<代码>系统。Data.SqlClient来连接Azure函数V2.0中的Azure SQL。例如

  1. 使用Visual Studio 2019创建Azure功能
  2. 安装System.Data。SqlClient软件包(版本为4.5.1)
  3. 开发功能

local.settings.json文件内容

  "ConnectionStrings": {
    "mycs": "Data Source="";Initial Catalog=DotNetAppSqlDb20190826105048_db;User Id="";Password="" "
  },

  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  }
}

密码

[FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;
            try
            {
                var connectionstring = System.Environment.GetEnvironmentVariable($"ConnectionStrings:mycs"); ;



                using (SqlConnection connection = new SqlConnection(connectionstring))
                {


                    connection.Open();
                    log.LogInformation(" sql login success");
                    StringBuilder sb = new StringBuilder();
                    sb.Append("select * from dbo.Todoes");

                    String sql = sb.ToString();

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                log.LogInformation("{0} {1}", reader.GetInt32(0), reader.GetString(1));
                            }
                        }
                    }
                    connection.Close();
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
 类似资料:
  • 我正在尝试连接我的android应用程序,该应用程序使用php将登录页面连接到数据库。它正在连接到数据库。但它并不是从表中检索所有列。相反,只获取两个冒号。下面是代码 请帮我解决这个问题。 这里是登录表单的PHP代码 我的logcat显示以下错误。 但它显示点击提交按钮后停止工作,我需要检索数据显示在Android模拟器上 包com。实例主要的导入java。木卫一。缓冲读取器;导入java。木卫一

  • 我无法使用R Studio连接到Oracle数据库。 下面是我为设置连接而执行的代码。 以上代码已成功执行。 我在下面的代码中得到一个错误。 错误. jcall(drv@jdrv,"Ljava/sql/Connection;","Connec",as.character(url)[1],:java.sql.SQLExctive:指定无效的Oracle URL 我的R版本是3.4.0

  • 我无法使用客户机SquirrelSQL连接到MySQL。我以前曾设法连接到Oracle和Derby,但这次,我不知道我做错了什么。 我已经在我的Mac上安装了MySQL,以下步骤: > 要确保安装安全,请执行以下操作: 要创建新数据库: 要知道数据库存储在哪里: 创建一个表 在我遵循这些步骤之后: MySQL安装在/usr/local/ceral/MySQL/5.6.17下 在SQuirreL中,

  • 从下面描述的tsk开始,我在一个看似简单的过程中遇到了无数问题。但首先是一些背景: Windows 10 QGIS 2.18.5 PgAdmin 4(v 2.0) Postgreql 10安装 -Postgreql数据库(托管在运行PostgreSQL 9.6.5的Amazon AWS云上) 我对postgreql和postgis非常陌生,但是在遵循所有基本说明之后,我似乎无法在QGIS中查看任何

  • 我在Spring是全新的,在Spring Hibernate无法连接到我的MySQL数据库。我得到 请求处理失败;嵌套异常为:org.springframework.transaction.CanNotCreateTransactionException: 无法打开事务的JPA EntityManager;嵌套异常为javax.persistence.persistenceException:or

  • 我正在尝试与Linux中的mysql数据库连接。我知道我在包含jar文件时犯了错误。我不知道如何在linux中引用这些jar文件,就像我们在eclipse或NetBeans中引用它们一样。我正在使用Tomat7运行这些jsp页面。 类型异常报告 消息处理第9行的JSP page/first.JSP时发生异常 说明服务器遇到内部错误,导致它无法完成此请求。 例外情况 JasperException: