2008年10月15日水曜日

.NetFramework2.0のMailMessageクラスの仕様(IFAX編)

System.Net.MailのMailMessageクラスを利用したメール送信アプリケーション作成時に問題が発生した。
簡単に言えばこのクラスは日本規格対応されていない為発生した現象だ。

対象相手はNTTのiFAXだ。

通常このクラスはUTF-8を前提に作られており、Shift-jis対応を行おうとした際には各パートでエンコードを変更しなければならない。
エンコード自体はできるのだが、メールヘッダーの記述順序が存在し、それが原因でこのクラスの利用が見送られた。

  内容:
* 解説書上の以下の記述とSystem.Net.Mailクラスから生成される現象について記します。
*
* 解説書:メールヘッダーのbody部のContent-Type第一句に次の定義が必要
*   Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit
*
* System.Net.Mailで作成した場合の第一句:
* Content-Type: multipart/alternative
*
* これはSystem.Net.Mailクラスで作成されるメールヘッダーはjis・shift-jis規格に完全対応していない為発生する。(UTF-8対応)
* このクラスにあるMailMessageクラスのHeaderメソッドはメールヘッダーを独自に生成する機能では無く、HTMLとテキストを混在して生成できるクラス
* AlternateViewクラスを利用してshift-jisにエンコードしたbody部を作成する必要がある。
* ただ、このクラスを利用すると必ずContent-Type: multipart/alternativeがセットされる為、
* 今回の要求には全く合わない。
*
* これを回避する方法はSocketプログラム(TCP/IPプログラム)を別途手組みで作成する必要がある。

納期との噛み合いもあり無償のツールを利用する事で回避できたが、この問題は各国の仕様に振り回されている感が大きい。

2008年8月8日金曜日

app.configからconnectionStringを取得

app.configファイルからデータベースへのコネクションストリングを取得する方法:

使用するクラス
ConfigurationManager
namespace:System.Configuration

注意:
1.System.Configuration.dll への参照を追加する事で使用可能になります。
2.staticな ConnectionStringSettings クラスを使う事でスレッドセーフなコネクションストリングを生成できます。

例:

using System.Configuration;
...

ConnectionStringSettings conStrings =
ConfigurationManager.ConnectionStrings[SendMail
Biz.Properties.Settings.SendMailConnectionString;
//コネクションストリングの取得

Console.WriteLine(conStrings .ConnectionString);
Console.WriteLine(conStrings .ProviderName);

2008年7月15日火曜日

Access2007でのフォームの移動可能プロパティ

ある事をきっかけにAccess2007の作成したフォームが、タグとして組み込まれてしまっているので、ウィンドウ化できないかとのご質問。

初めて作ったら確かにそのように表示されてしまう。

Access2007のテンプレートアプリケーションと比較したところあるプロパティが違っていた。

『移動可能』プロパティだ!!

ここが初期値として『いいえ』になっているので、最大化・最小化ボタンの表示が『はい』になってもウィンドウで表示されず、タグで表示されてしまう。

以外なトラップだ。。。

2008年6月10日火曜日

ProgressBarコントロールの使い方

ふとProgressBarが使いたくなったので、検索したところ参考サイトを発見!!

良く出来ている。

DoEventsやマルチスレッドについても載っているので大いに参考

http://dobon.net/

2008年6月4日水曜日

Accessで『多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される』が出たら!!

Access上で大量のトランザクションが発生したらよく出ます。

この値を変更すれば問題ないかと思います。

それにしてもAccessでは大量トランザクションを走らせる事を前提にしていないことが良くわかる。

確かに大量データであればServerとして稼動目的としているDBを使ったほうが良いという事なのだが。。。

たぶん最適な方法!!
『SetOption メソッドを使用して MaxLocksPerFile の値を一時的に変更する 』
DAOを使います。

DAO.DBEngine.SetOption dbmaxlocksperfile,15000


参考:
http://support.microsoft.com/kb/815281/ja

2008年5月30日金曜日

フリーなログツール

少し前に試したログ管理のツールです。

お手製を考えたり、同僚が作ったりしているのですが、
ソースレベルでコピーしてこなければならないのと、
メッセージが思ったようにならない事を考えると、やはりツールを使った方が。。。

との考えから発掘しました。

結構有名なツールだそうです。

ツール名:Log4net

面白そうです。




2008年5月28日水曜日

C#の情報

結構載っているサイト!!

考えるにはベストかと・・・