プログラミング: 2023年8月アーカイブ

Tedious ドライバーを使って SQL Server に接続できない・・・」というエントリーに書いたように、Tedious ドライバーを使って JavaScript(node.js)からの SQL Server 2019 へのアクセスだけがうまくいかない。

C# で試しにコンソールプログラム作ってアクセスしてみたけど、やっぱりうまくいくなあ。

Program.cs はこんな感じ。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

dbaccess();

        static void dbaccess()
        {
            string dataSource, initCatalog, userId, passWord, connectionString;
            dataSource = "DBSERVER\\MSSQL2019";
            initCatalog = "InazumaDB";
            userId = "sa";
            passWord = "hogepass";
            connectionString = @"Data Source=" + dataSource + ";Initial Catalog=" + initCatalog + ";User ID=" + userId + ";Password=" + passWord;
            string query_s = "SELECT TOMO_ID, TOMO_NAME, TOMO_MEMO FROM InazumaDB.dbo.M_TOMODACHI";

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                //接続
                conn.Open();

                //SQL文を作成
                SqlCommand command_s = new SqlCommand(query_s, conn);

                using (SqlDataReader reader = command_s.ExecuteReader())
                {
                    //繰り返し読み込み
                    while (reader.Read())
                    {
                        //1~3列目の値を表示
                        Console.WriteLine(String.Format("{0}, {1}, {2}", reader[0], reader[1], reader[2]));
                    }
                }
                conn.Close();
            }
        }

これを実行すれば、コンソールに、

      1, アンモニア治郎, おごってくれるから友達
      2, クロム陽子, かわいいから友達
     14, ばいじん太郎, 事業に失敗したからそろそろ切ろう

こういう結果が表示される。

やっぱり、Tedious ドライバーが古くて SQL Server 2019 に対応していないってオチなんかね?

しばらく別件で忙しいので、調べている時間がないが・・・

Blazor で作成するのはだいたい企業内の Web システムだと思う。オープンなサイトをわざわざこんな糞重いフレームワークで組む人はいないだろう(よっぽどの Microsoft 好きか C# 以外の言語がまったくできない人を除いて).

今、Blazor で構築を予定しているサイトもやはり企業向けの Web サイトでログイン認証が必要である。
最初、自前でログイン画面を作って組み込んだ人のサイトなど見て勉強していたのだが、Blazor ってちゃんと「認証付きWeb画面」のテンプレートが用意されてるね。

新規プロジェクとで「Blazor WebAssembly アプリ」を選択。

20230804_blazer21.jpg

とりあえずテストなので、プロジェクト名などはそのままで「次へ」。

20230804_blazer22.jpg

そして、「認証の種類」で「なし」から「個別のアカウント」に変更して「作成」。
ちなみに、下に表示されていたチェック項目の「HTTPS用の構成」は「個別のアカウント」を選択すると消える。認証するときには SSL が前提なのでは選択不可(常に選択)になるということだろうなあ。

20230804_blazer23.jpg

これで作成されたプロジェクトを実行すると、画面の右上に「Login」というリンクが作成されている。

この Login をクリックしてみると、「フォームがモジュールにありません 読み込まれたモジュールに現在のスタック フレームが見つかりませんでした。この場所のソースは表示できません。」と VisualStudio 上に表示。そのまま処理を続けると、ブラウザの「There was an error trying to log you in: 'Network Error'」と表示された。

ま、なんの処理も書いてないからな(笑)

実際の認証処理作成の話はまた別のエントリーで。

Blazor WebAssembly は、JavaScript の代わりに C#言語を用いて Web アプリケーション(SPA(Single Page Application)ページ)を構築できるフレームワークだ(と書くと、小うるさい方々から色々指摘もありそうですが、まあ、いいのよ、いいのよ(笑))。

まあ、まあ、詳しくはググって識者の方のページを見てちょうだい。

で、とりあえず新規ページの追加方法のメモ。

まず、Pages の上で右ボタンメニューを展開。「追加」→「Razor コンポーネント...」を選択する。

20230804_blazer1.jpg

すると、新しい項目の追加画面が開くので、Razor コンポーネントを選択し、名前に新しく作成するファイル名(例では Login.razor)を入力し「追加」を行う。

20230804_blazer2.jpg

このとき、小文字で始まるファイル名、例えば login.razor などを指定すると、ビルドのとき、

RZ10011 Component 'login' starts with a lowercase character. Component names cannot start with a lowercase character.

ってエラーが出る。「コンポーネント名を小文字で始めることはできません。」ということなので、Login.razor に名前を修正する。

20230804_blazer3.jpg

これで、空の Razor コンポーネントファイルが作成されるので、あとは処理を書いていくだけ。

識者の方がたまたまこのエントリーを目にして、親切に指導していただけますように・・・という願いを込めて・・・

いや、実は Tedious ドライバーを使って、node.js で SQLServer に接続しようと思ってます。複数インスタンスが存在しているサーバに対して、下記のような JavaScript を書いて node.js で実行してみます。

    var Connection = require('tedious').Connection;  
    var config = {  
        server: 'DBSERVER\\MSSQL2019',
        authentication: {
            type: 'default',
            options: {
                userName: 'sa',
                password: 'hogepass'
            }
        },
        options: {
            encrypt: true,
            database: 'InazumaDB'
        }
    }; 

    var connection = new Connection(config);  

    connection.on('connect', function(err) {  
        if (err) {
            console.log(err);
        } else {
            console.log('CONNECT');
        }
    });

    connection.connect();

しかし、エラーに。接続できない・・・

C:\Users\shinoda>node connect_test.js
ConnectionError: Failed to connect to DBSERVER\MSSQL2019:1433 - getaddrinfo ENOTFOUND DBSERVER\MSSQL2019
    at Connection.socketError (C:\Users\shinoda\node_modules\tedious\lib\connection.js:1404:28)
    at C:\Users\shinoda\node_modules\tedious\lib\connection.js:1185:14
    at process.processTicksAndRejections (node:internal/process/task_queues:77:11) {
  code: 'ESOCKET',
  isTransient: undefined
}

ただ、コマンドプロンプトから sqlcmd で接続すると、特に問題なく接続できるので、サーバ側の問題だとか、ホスト名が引けてないんだろうとか、そういう根本的な問題ではないと思うんですよねえ。

C:\Users\shinoda>sqlcmd -S DBSERVER\MSSQL2019 -U sa -P hogepass -d InazumaDB
1> SELECT * FROM M_TOMODACHI;
2> GO
TOMO_ID TOMO_NAME             TOMO_MEMO                              
------- --------------------- ---------------------------------------
      1 アンモニア治郎        おごってくれるから友達
      2 クロム陽子            かわいいから友達
     14 ばいじん太郎          事業に失敗したからそろそろ切ろう

(3 行処理されました)
1>

こんな感じで、sqlcmd ならバッチリです。

うーん、何がいけないんでしょうねえ。Tedious ドライバー自体はこの間最新版を入れたつもりですが・・・

このアーカイブについて

このページには、2023年8月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2023年6月です。

次のアーカイブはプログラミング: 2023年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら