0
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 1 year has passed since last update.

【Mac】Node.js と【Windows】SQL serverを接続し、SQLserverのデータ(画像)を抽出する方法

Posted at

目的

windows8.1内のSQLserver2005から画像データ(バイナリ)を抽出し、画像に変換し、変換した画像はMac側に保存する。

やったこと

windows内で諸々の作業ができればよかったのですが、windows環境ではネットも繋がっておらず、色々と作業しにくいこともあり、プライベートネットワークを介して、mac内のnode環境から抽出することにした。

大まかな手順

  1. windowsマシンを(LANケーブル等で)プライベートネットワークに接続

    コマンドプロンプトでIPCONFIGコマンドを叩いて、IPアドレスを確認。

  2. macとwindowsマシンを接続確認

    取得したIPアドレスに対し、ターミナルで$ ping IPアドレスコマンドを叩いて、接続を確認。

  3. mac上でNodeアプリを作る
    SQLserverのドライバ「Tedious」をインストール。DB設定情報をセット。

  4. nodeアプリから、SQLを叩いて、データ抽出。バイナリを画像に変換して保存。

抽出するプログラムをNode.jsで作る

上記手順の3について、詳細に説明します。


const { Connection, Request } = require('tedious'); // ⇦SQLserverのドライバー

//DB接続設定
const config = {
    authentication: {
        options: {
            userName: 'username',
            password: "password"
        },
        type: 'default'
    },
    server: 'windowsマシンのIPアドレス(IPv4)',
    options: {
        port: SQLserverのポート番号,
        database: 'DBname',
        encrypt: false,
        instancename: 'SQLserverのインスタンス名'
    }
};
const connection = new Connection(config);

//クエリを実行し、バイナリが返ってきたら画像変換し、Mac内に保存する処理
const execute = () => {
    const sql = '実行したいSQLをここに記述';
    const request = new Request(sql, (err, rows) => {
        connection.close();
        if ( err ) {
            console.log(err);
            process.exit();
        }
    });
    request.on('row', columns => {
        columns.forEach(column => {
           var fs = require("fs");
           fs.writeFile("newImage.jpg", new Buffer([バイナリ], "base64"), function(err) {});
        });
    });
    connection.execSql(request);
};

//DBと接続し、成功すればクエリを投げる。
connection.on('connect', err => {
    if ( err ) {
        console.log('error: (' + err + ')');
        process.exit();
    }
    console.log('success');
    execute();
});

connection.connect();

NodeからSQLserverを操作するにあたり、必ずドライバーが必要となります。
SQLserverのドライバーには、tediusを使用します。

あとは、ターミナルで

$ node このファイル名.js

で実行すれば、画像が抽出できるかと思います。

参考にした記事

https://symfoware.blog.fc2.com/blog-entry-2481.html
https://www.npmjs.com/package/tedious

0
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
0
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?