0

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 ファイルについて言及する必要がありますか? どのように?

4

1 に答える 1