- PR -

SQL CLRをExcel2000のVBAでは使えるのでしょうか

投稿者投稿内容
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-12 13:54
こんにちは。
初心者の質問といいますか、とんちんかんな質問になっているかもしれないので、すいません。
SQLServer2005のSQL CLRをExcel2000のVBAから使うことはできるのでしょうか。
また、できるとしたら、どのようなコードになるのでしょうか。
サンプルサイトやサンプルコードを紹介して頂けると助かります。
具体的にやりたいことというのは、
通常はASP.NETのシステムでデータの登録、更新を行うのですが、
メンバーの中に視覚障害の方がおり、その方がASP.NETのシステムを使えない(仕組みが変わってしまうことに、なかなか対応できない)ので、その方だけはExcel2000でデータを更新してもらい、セルの値が変更されたら、SQLServer2005に変更された値を渡して、データベースの更新をしたいのです。
おかしな質問になっていたらすみません。
よろしくお願いします。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-06-12 16:50
こんばんは。

SQLCLR で作成したストアドプロシージャは Excel から ADO 経由で通常のストアドプロシージャと同じように利用できます。

以下は ADO から SQLCLR ストアドプロシージャを実行する VBA のコードです。
コード:
Private Sub RunStoredProc()
    Dim connection As New ADODB.connection
    connection.ConnectionString = "Provider=SQLOLEDB.1;" & _
    "Integrated Security=SSPI;" & _
    "Persist Security Info=True;" & _
    "Data Source=localhost;" & _
    "Initial Catalog=testDB"
    connection.Open
    Dim command As New ADODB.command
    command.ActiveConnection = connection
    command.CommandType = adCmdStoredProc
    command.CommandText = "[dbo].[usp_StoredProcedure1]"
    command.Execute
    connection.Close
    Set command = Nothing
    Set connection = Nothing
End Sub


データの登録や更新を行うシステムということなので、実際はパラメータや戻り値の処理を組み込んだもう少し複雑な処理になると思います。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-12 17:40
ありがとうございます。
VBAのコードまで書いていただいて。
恥ずかしながら、ストアドプロシージャもSQL CLRも実際のところ使用したことがありません。できるということがわかったので、早速SQL CLR関係の本を探してみようと思います。
パラメータももちろん必要になるのですが、
パラメータの渡し方というのは、
通常のSQL Commandのように、
.Parameters.Add("@CODE", SqlDbType.Int).Value = 1
のようなコードでよいのでしょうか。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-06-12 19:07
ueです。

引用:

えりさんの書き込み (2007-06-12 17:40) より:

パラメータももちろん必要になるのですが、
パラメータの渡し方というのは、
通常のSQL Commandのように、
.Parameters.Add("@CODE", SqlDbType.Int).Value = 1
のようなコードでよいのでしょうか。


はい。通常の ADO.command オブジェクトでいけます。

SQLCLR というテクノロジは、作成した .NET のアセンブリをデプロイ時に T-SQL のオブジェクトでラッピングすることで実現しています。
そんなわけで、通常のストアドプロシージャを扱う方法を知っていれば同じ方法で SQLCLR のストアドプロシージャも利用できます。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-13 09:20
おはようございます。
ありがとうございます。

>作成した .NET のアセンブリをデプロイ時に T-SQL のオブジェクトでラッピングすることで実現しています。
う〜ん、私などには凄く難しいのですが・・・。
ただ、SQL CLRはそんなに違和感無く使えそうな気がしてます。
まずは勉強しなくては、始まらないですね。


片桐 継
会議室デビュー日: 2007/05/16
投稿数: 14
お住まい・勤務地: 東京
投稿日時: 2007-06-13 22:32
出遅れ(汗)

もう解決かな?と思いつつも、ueさんのむずかしー、という部分を簡単に。

メロンを想像してください。表面に網目のかかったメロンですが、そのメロンの中が緑色のメロンなのか赤い色の夕張メロンなのかは切ってみないと判りませんよね? でも、食べる側からすれば「目の前のメロンを食べる」という行為に全く違いはありません。

つまり、EXCELのVBAや、他のVB、C#などからストアドプロシジャを実行したい場合に、そのストアドプロシージャがT-SQLで作られているのか、PL-SQLで作られているのか、SQL CLRで作られているのかは意識しなくても、「ストアドプロシージャを呼び出して実行する」という部分さえ出来ていれば可能なんです。

SQL CLRは、.NETプログラミングの要領でプログラムして、コンパイル後にDLLファイルを作り、そのDLLファイルをSQL-Serverにアセンブリという名前のオブジェクトに登録することで、決められた名前規則にしたがって書いておいた関数がストアドプロシジャとして呼び出される仕組みになっています。

VBAやVBを経験している人なら、違和感なく使いこなせるとおもいますし、T-SQLだとやりにくかった複雑な処理もできるようになるので便利ですよ。

頑張ってください。

_________________
片桐 継(Tugu Katagiri)@わんくま同盟
http://blogs.wankuma.com/esten

[ メッセージ編集済み 編集者: 片桐 継 編集日時 2007-06-13 22:49 ]
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-14 09:32
おはようございます。
よくいうブラックボックスみたいなイメージでしょうか。
(全然違うことを言っていたらすみません)
ストアドプロシージャと比べると、SQL CLRは一から覚えるという感じではないようなので、何とかついていけそうです。
ありがとうございます。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-06-14 12:21
おはようございます。

片桐さん、フォローありがとうございます。

引用:

えりさんの書き込み (2007-06-14 09:32) より:

よくいうブラックボックスみたいなイメージでしょうか。


うーん、ADO 等のデータアクセステクノロジに .NET を意識させないという点でブラックボックスといえるかもしれません。
ただ、「ブラックボックス化する技術」として覚えるよりも「ラッピングする技術」として覚える方が良い気がします。

引用:

えりさんの書き込み (2007-06-14 09:32) より:

ストアドプロシージャと比べると、SQL CLRは一から覚えるという感じではないようなので、何とかついていけそうです。


.NET の開発スキルを生かせる SQL CLR は素敵な技術ですが、利点と難点とがあります。
SQL Serverプログラミングを革新するSQL CLRとは? にあるように、SQL CLR の採用が最適ではない処理があるので、そのあたりは意識しておく必要があります。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島

スキルアップ/キャリアアップ(JOB@IT)