3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AzureでRDBとfunctionsを繋ぎたい】(3)functionsからSQLの操作

Last updated at Posted at 2019-12-01

★当記事は連続記事となります。
前項の設定を使用している箇所もあるので最初からお読み頂くことをお勧めします。

 
上記で作成したSQLDataBaseとfunctionsを繋ぎます。
タイトルでも記載しましたがここで様々なトラブルが出ました。気を付けるポイントとして

  • Nugetパッケージのバージョンを確認する
  • AzureWebJobsStorageの情報を確認する
  • SQLの接続文字列の入力

あたりとなります。 

#NuGetパッケージを追加(バージョン超注意)
AzureFunctionsにAzureのSQLを操作をさせるには、まずnugetパッケージを追加する必要があります。

ソリューションエクスプローラーから右クリックで「nugetパッケージの追加」
001・nugetその1.png
 
 
「参照」タブを選び、検索窓に「System.Data.SqlClient」を入力すると出てくるので選択。
002・nugetその2.png
 
 
僕は4.7を入れたのでハマりました。入れるのは4.5.1です。
003・nugetバージョンはこれ.png
 に
 
#AzureWebJobsStorageの情報をVisualStudioに設定されているか確認
続いて、functionsで使用しているストレージの情報をVisual Studioにちゃんと入れます。(入っている場合もあるみたいだが、自分はここが外れていてハマりました)。
ポータルから作成した関数アプリを選択し、「関数アプリの設定」を選択。
004・ストレージのアドレス接続情報確認1.png
 
 
「アプリケーション設定の管理」を選択
005・ストレージのアドレス接続情報確認2.png
 
 
そこにある「AzureWebJobsStorage」の値をコピーします。上の方に「値を表示する」があるのここを押す。
006・ストレージのアドレス接続情報確認3.png
 
 
かなり長い文字列なので。この鉛筆マークを押すと別ウィンドウで値が表示されます。
007・長いので編集ボタンで別ウィンドウで値を表示する事が出来る.png
 
 
VisualStudioに戻ります。発行(デプロイ)メニューの中に「Azure App Servisの設定を編集する」があるのでこれを選択
008・ストレージとの接続1.png
 
 
ここに「AzureWebJobsStorage」があるのでそこにポータルでコピーした「AzureWebJobsStorage」をペースト
009・ストレージとの接続2.png
 
 
#SQLの接続文字列を投入
ポータルから先に作ったSQLを選択し「接続文字列」を選び、「ADO.NET」を選びます。その中のテキストボックスに入っている文字列をコピーします。
コピーする際に、パスワードの部分が{your_password}になっているので先に設定したSQLのパスワードに書き換えます。書き換える時に{}は取ります。
010・sqlから接続文字列を持ってくる.png
 
 
ついさっき、AzureWebJobsStorageを設定した「アプリケーション設定の管理」で今度は値を追加します。設定の追加という項目があるのでこれを選択。
011・設定の追加ボタン.png
 
 
設定の追加。sqldb_connectionと名前を付けてみます。この名前はfunctions内のコードで使えます。
012・設定の追加1.png
 
 
そうすると、sqldb_connectionの設定が出来るようになるので、ローカル、リモート共に、先ほどコピーとパスワードの部分を正規のものに変更した接続文字列を貼り付けます。
012・設定の追加2・欄が出来るので入力.png
 
 
#新しい関数追加
せっかくなので、新しい関数を追加してみます。
ソリューションエクスプローラーから「追加」→「新しいAzure関数」を選択
013・新しい関数追加.png
 
 
Azure関数を選択
014・azure関数を選択.png
 
 
また、今回はhttpトリガーの関数を選択。特に意味はありませんが今回はAuthorizationlevelはfunctionにしてみます。
015・またもhttp。今度はfunction.png
 
 
コードを記載します。

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Data.SqlClient;

namespace sql_and_function
{
    public static class Function2
    {
        [FunctionName("Function2")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {

            // Get the connection string from app settings and use it to create a connection.
            var str = Environment.GetEnvironmentVariable("sqldb_connection");
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                var text = "INSERT INTO Hajimetenodb VALUES ('SABURO',50);";

                using (SqlCommand cmd = new SqlCommand(text, conn))
                {
                    // Execute the command and log the # rows affected.
                    var rows = await cmd.ExecuteNonQueryAsync();
                    log.LogInformation($"{rows} rows were updated");
                }
            }

            return (ActionResult)new OkObjectResult($"SQL UPDATE");
        }
    }
}

ポイントとしては、

  • using System.Data.SqlClient; の追加
  • var str = Environment.GetEnvironmentVariable("sqldb_connection"); で先ほど入れた接続文字列の取得。これを基にSQLアクセスへ繋げている。
  • 今回は "INSERT INTO Hajimetenodb VALUES ('SABURO',50); というクエリを発行しています。
  • 最後に「SQL UPDATE」というメッセージを出しています。
     
     
    こちらも発行を行い、実行してみます。
    019・サクセスメッセージ.png
     
     
    早速ssmsで確認。追加されていました。
    020・追加された.png
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?