提问人:Marco Jr 提问时间:10/12/2022 更新时间:10/14/2022 访问量:130
Azure Functions + Azure SQL:会话提供程序错误 19 - 物理连接不可用
Azure functions + Azure SQL : session provider error 19 - physical connection is not usable
问:
这从今天开始占据...... 我一直在寻找解决方案,但我只能在不同的场景中找到它,例如在 Azure Functions 之外或使用不同的客户端库。无论如何。。。
这是我的客户:
using System;
using endpoints3t.Models;
using System.Data.SqlClient;
namespace endpoints3t.DataAccess
{
internal class MssqlClient
{
public MsSqlServer Client;
private string thisEnv = Environment.GetEnvironmentVariable("ThisEnvironment");
public MssqlClient()
{
var str = Environment.GetEnvironmentVariable($"MsSql_{thisEnv}_ConnectionString");
SqlConnection c = new SqlConnection(str);
Client = new MsSqlServer()
{
Client = c
};
}
}
}
这是一个简单调用的示例:
public async Task<List<Something>> GetSomeData()
{
if (msSQL.Client.Client.State == System.Data.ConnectionState.Closed)
{
msSQL.Client.Client.Open();
}
using (SqlCommand cmd = new SqlCommand("ExecMyStoredProcedure", msSQL.Client.Client))
{
cmd.CommandType = CommandType.StoredProcedure;
var reader = await cmd.ExecuteReaderAsync();
while (reader.Read())
{
var item = new Something()
{
Id = Guid.Parse(reader["Id"].ToString())
};
result.Add(item);
}
}
return result;
}
根据文档,System.Data.SqlClient 控制连接的打开/关闭,也许由于这个原因,我找不到太多关于如何处理这种情况的文档。有什么帮助吗?
答:
1赞
Delliganesh Sevanesan
10/14/2022
#1
如果要连接 azure 函数外部的任何服务,则必须注入该函数。
解决方法如下
在这里,我创建了 azure 函数并创建了连接类来打开连接并插入到 SQL 数据库。
注意:尝试连接 Azure SQL Server 时,有权进行连接。确保您的 IP 已添加到防火墙中。
触发功能
public class Function1
{
private readonly connectdb getconnection;
public Function1(connectdb getconnection)
{
this.getconnection = getconnection ?? throw new ArgumentNullException(nameof(getconnection));
}
[FunctionName("Function1")]
public async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
// Get the connection string from app settings and use it to create a connection.
var str = Environment.GetEnvironmentVariable("sqldb_connection");
var resconn = await getconnection.Getconn(str);
log.LogInformation("$\"{resconn} rows were updated\"" + resconn);
}
}
连接 .cs
public async Task<int> Getconn(string myconn)
{
using (SqlConnection conn = new SqlConnection(myconn))
{
conn.Open();
var text = " Insert into <table name>(col2,col2,col3) Values('AAA','BBB','CCC')";
using (SqlCommand cmd = new SqlCommand(text, conn))
{
// Execute the command and log the # rows affected.
var rows = await cmd.ExecuteNonQueryAsync();
return rows;
}
}
}
评论