目的
windows8.1内のSQLserver2005から画像データ(バイナリ)を抽出し、画像に変換し、変換した画像はMac側に保存する。
やったこと
windows内で諸々の作業ができればよかったのですが、windows環境ではネットも繋がっておらず、色々と作業しにくいこともあり、プライベートネットワークを介して、mac内のnode環境から抽出することにした。
大まかな手順
-
windowsマシンを(LANケーブル等で)プライベートネットワークに接続
コマンドプロンプトで
IPCONFIG
コマンドを叩いて、IPアドレスを確認。 -
macとwindowsマシンを接続確認
取得したIPアドレスに対し、ターミナルで
$ ping IPアドレス
コマンドを叩いて、接続を確認。 -
mac上でNodeアプリを作る
SQLserverのドライバ「Tedious」をインストール。DB設定情報をセット。 -
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