normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Node.js で SQL Azure に接続しようとしてみる 〜実用に耐えない編〜

先日紹介した id:waritohutsu:20110821:1313947003 をもとに、今回はサードパーティ製のライブラリを利用して SQL Azure に接続しようと試みる。結果として実用に耐えるものではなかったが、無事に疎通には成功したのでこちらで紹介する。

Node.js で SQL Azure に接続

まず最初に Node.js で SQL Server に接続するためのサードパーティ製ライブラリを探したところ、 http://stackoverflow.com/questions/5156806/node-js-and-microsoft-sql-server での Node.js and Microsoft SQL Server が目に留まった。こちらから github のリポジトリである orenmazor / node-tds のライブラリを取得し、以下のソースコードを利用して実行した。

var mssql = require('mssql');

var connectionString = {'Server':'<サーバ名>.database.windows.net',
//var connectionString = {'Server':'111.221.69.22', <-------- たまにホスト名解決に失敗するので、こっちで叩くと動くかも(East Asiaの場合)
'Port':'1433',
'Database':'<データベース名>',
'User Id':'<ユーザ名>@<サーバ名>',
'Password':'<パスワード>'};

console.log("================ start ================");

//try a connection
var sqlserver = new mssql.mssql();
sqlserver.connect(connectionString);
var result = sqlserver.executeQuery("SELECT * FROM Comment;");
console.log(result);

console.log("================ end ================");

実行結果は以下となる。何がなんだか分からないが、どうやら疎通には成功したがデータが読み取れないようだ。

C:\my_program\JavaScript\Node.js>node.exe example_db.js
================ start ================
undefined
================ end ================
Client connected.
<Buffer 12 00 08 00 00 00 01 00 ff>
<Buffer 10 00 00 08 00 00 01 00 00 00 00 00 00 00 00 71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 92 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 31 3
 61 24 24 77 30 72 64 64 69 73 61 6d 69 44 42 6e 6f 64 65 2d 74 64 73 00 00 00 00 00 00>

mssql.js のソースコードを読む

何か問題があるのかと思い、クエリ実行部分のソースコードを確認した。確認した部分は以下となる。

        client.addListener("connect", function() {
            sys.puts("Client connected.");
            //send initial prelogin packet. negotiate for no TLS (for now)
            var buff = tds.Handshake();
            console.log(buff);
            var res = client.write(buff);
            
            //TODO parse the response packet.
            
            //okay, now lets try a LOGIN7 record to login
            buff = tds.Login7(connectionString['User Id'],connectionString['Password'],connectionString['Server'],connectionString['Database']);
            console.log(buff);
            result = client.write(buff);
            
        });

「//TODO parse the response packet」。。。。3月以降、同ライブラリのバージョンアップは行われていないようでもあり、Node.js でSQL Azureを利用するのは困難なようだ。。。。