Dynamics CRM に XRM を使ってアクセスしている際に、Generic SQL Error となる場合があります。

わかりにくいエラーのため原因がどこにあるのかわかりにくいのですが、CRM Database へのアクセスでタイムアウトが発生した際にもこのエラーとなります。
タイムアウトは回避する方法としては、CRM サーバーのレジストリで OLEDB のデフォルトタイムアウトを変更するという方法が利用できます。

レジストリエディタで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\
に DWORD で OLEDBTimeout というキーにタイムアウトに設定する秒数を指定します。
デフォルトでは、30秒となっているようです。

レジストリを書き換えたら、IISの CRM が利用しているアプリケーションプールを再起動することで、設定が反映されます。

その他詳しい情報として、下記の Blog もありますので、併せて利用してみてください。
http://billoncrmtech.blogspot.com/2008/10/sql-timeouts-in-crm-generic-sql-error.html

Currently rated 3.0 by 28 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Dynamics CRM SDK に xRM が追加されて LINQ を使ったアクセスなどができるようになりました。
これを使うと非常に簡単に Dynamics CRM にアクセスできるようになったのですが、Update する際に StatusCode が変更できない問題にあたりました。

0x80048408 : 2 is not a valid status code for state code AccountState.Active on account.

まだ xRM のドキュメントが少なく、ステータスをアップデートする方法を探し、以下の方法で StatusCode / StateCode を更新できることがわかりました。

context.UsingService(service =>
   {
      var request = new Microsoft.Crm.SdkTypeProxy.SetStateAccountRequest()
      {
         AccountState = Microsoft.Crm.SdkTypeProxy.AccountState.Inactive,
         AccountStatus = 1 + (int)Microsoft.Crm.SdkTypeProxy.AccountState.Inactive,
         EntityId = entity.accountid
      };

      service.Execute(request);
    }
  );

もはや xRM の影がないのですが、べたべたな方法なもののこれでアップデート可能でした。

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5