« 2008年12月 | トップページ | 2009年3月 »

2009年1月11日 (日)

mdfでのSQL CLRの有効切り替え

「.NET Framework でのユーザー コードの実行は無効です。"clr enabled" 構成オプションを有効にしてください。」

mdfで、このエラーがでる場合は、VS2008のサーバーエクスプロラで、対象のmdfを開き、新しいクエリで、下記を実行する。

sp_configure 'clr enabled', 1
RECONFIGURE

http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_09/vs2005db_09_02.html

「SQL Serverセキュリティ構成」のCLR有効とは、別なので注意が必要。

○アセンブリ名を削除するには

新しいクエリで、下記を実行する。

DROP ASSEMBLY <アセンブリ名>

2009年1月 9日 (金)

mdfが他のプロセスで使用中になってしまったときの対処

リブートしてもダメなときは、SQL Server Managment Studio で、そのファイルがアタッチされていたら、タスク-デタッチする。

どうにもならなくなったら、データベースを新規作成で新たにつくる。

オリジナルライブラリを、IntelliSenseに対応させる

自分で作成した、クラスライブラリを使うとき、呼び出し側でIntelliSenseや、引数のコメントがでると便利である。

VS2005には、この機能が備わっており、プロジェクトのプロパティ-ビルドの出力項目で、XMLドキュメントファイルにチェックを入れる。

http://dobon.net/vb/dotnet/programing/xmldocument.html

だだし、コメントがない関数等でワーニングがでるようになるので、デバッグが済んだ時点で、出力されるようにしないと、うっとうしい。

VB用DLLをC#から呼び出す

VB6向けに作られたDLLを呼び出すのは、通常のDLL呼び出しと同じ。

ただし、固定長文字列を含む構造体を引数とするDLLの場合はオプションの指定が必要。

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct AuthMemberInfo
    {
        /// <summary>ユーザーID</summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
       
public string userID;

        /// <summary>ユーザー名</summary>
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string userName;
    }

fixed char vendor[31]等でも可能だが..

  • unsafeだらけになってしまう
  • 文字列とchar配列の変換が必要
  • 構造体のポインタの記述が必要

など、ひどく面倒になる。

また、文字配列のサイズに注意する。たとえば、VBで30文字の場合、C#では31文字必要になる場合がある。うまくいかない場合は、+1してやってみること。

« 2008年12月 | トップページ | 2009年3月 »