Azure Function App を介して SQL サーバーから SELECT クエリを実行しようとしているので、後でそこから取得したデータを操作できます。私は Azure にかなり慣れていないので、何か不足している可能性があります。私のランタイム バージョンは ~3 です。これは C# HTTP トリガー関数です。
私のコードは完全にこのブログ エントリhttps://randypaulo.com/2018/12/19/querying-azure-sql-database-using-azure-functions-2-0-to-return-json-data/に基づいています。
これは、conn.Open(); で壊れる部分です。
try
{
var str = Environment.GetEnvironmentVariable("sqldb_connection");
using(SqlConnection conn =new SqlConnection(str))
{
using(SqlCommand cmd =new SqlCommand())
{
SqlDataReader dataReader;
cmd.CommandText = "SELECT TOP 10 ID FROM CATALOG";
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
dataReader = cmd.ExecuteReader();
var r = Serialize(dataReader);
json = JsonConvert.SerializeObject(r, Formatting.Indented);
}
}
}
この関数は、次のような約 10 個以上の警告で正常にコンパイルされます。
2021-02-01T21:54:58.159 [Warning] warning CS1701: Assuming assembly reference 'System.Data.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' used by 'System.Data.SqlClient' matches identity 'System.Data.Common, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of 'System.Data.Common', you may need to supply runtime policy
ただし、実際にクエリを実行する場合は、conn.Open(); ライン。非常に長いエラー メッセージが表示されます。しかし、「DLL 'sni.dll' またはその依存関係の 1 つを読み込めません:」と表示されます。
2021-02-01T21:57:29.802 [Information] The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.
2021-02-01T21:57:29.803 [Information] System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SNILoadHandle' threw an exception.---> System.DllNotFoundException: Unable to load DLL 'sni.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)at System.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize(IntPtr pmo)at System.Data.SqlClient.SNILoadHandle..ctor()at System.Data.SqlClient.SNILoadHandle..cctor()--- End of inner exception stack trace
私はいくつかの制限を実行しているので、それらをリストします。
- Visual Studio/Visual Studio Code を使用できません。
- ポータルでのみ開発可能
- ランタイムに切り替えられません ~2
- 新しいリソースを作成できません
これが私がこれまでに試したことです
- 代わりに Microsoft.Data.SqlClient を使用 > パッケージをインストールできません。(Package Reference は正常にインストールしますが、コンパイル時に欠落していると表示されます)
- function.proj ファイルを作成し、パッケージ参照を一覧表示しました > パッケージを実行および復元しますが、run.csx で使用されていないようです。
- dotnet add package System.Data.SqlClient によるパッケージの削除と追加
機能するもの:
- 接続文字列 > コンソールで sqlcmd を使用してクエリを正常に実行しました。
私の質問:
sni.dll を \shared\Microsoft.AspNetCore.App\2.2.14 フォルダーから \shared\Microsoft.AspNetCore.App\3.1.11 フォルダーにコピーする方法はありますか? (コンソールからの成功なし、禁止)
Azure portal からカスタム ライブラリまたは特定のライブラリを参照またはインストールするにはどうすればよいですか? ( #r "Newtonsoft.Json" や #load "file.csx" など)
run.csx ファイルを機能させるために、作成した function.proj ファイルについて言及する必要がありますか? どのように?