メイン » 仕事の周辺 » .NET

2005年02月24日

ロール別認証を使う時はGlobal.asaxの編集を忘れるな

自分用のメモです。
1月ほど前にやったことをすっかり忘れてます。
おかげで半日悩みました。
テスト用に新規にプロジェクト作ったりしました。
これで2度と忘れないでしょう。

投稿者 idic : 12:51 | コメント (0)

2005年03月04日

ADO.NETでmySQL接続

苦戦中。
まず、検索すると色んな方法が出てきて、何を使えばいいのか分からない。
一番オフィシャルっぽい、MySQL Connector/Netをまず試しているところ。
サンプルはあっけないほどすんなり動いたものの、日本語が文字化け。
mySQLにUTF-8で保存してあれば問題ないと思ったのですが。
なんでやねん?

投稿者 idic : 12:51 | コメント (0)

2005年03月08日

ADO.NETでmySQL接続 その2

COLLATEをデフォルトのutf8_general_ciではなくutf8_binにしないと駄目らしい。
よくわかりませんが、ここをみてこの通りにやると、MySQL Connector/Net付属のTableEditorで日本語の出し入れができました。

投稿者 idic : 12:39 | コメント (0)

2005年03月09日

ADO.NETでmySQL接続 その3

挫折中。
COLLATEをutf8_binにするとCGIでインサートした日本語(Jcode.pmのUTF8)が正常に扱えません。
MySQL Connector/NetというよりもmySQL自体が拒否っている感じ。
テーブルへの出し入れは問題なのですが、テーブルを読みながら別テーブルへインサートしようとすると、レコードを無視してくれます(エラーも吐かず、正常終了)。
.NetとCGIでそれぞれ同じ文字列をインサートしてみたら、確かに違うものが入っている。CGIで入れた方は、UTF8で保存したファイルをShift_JISで開いたような感じ。.Netの方は「????」。
めげてEUCに戻し、.Net側でグリッドに貼り付けるのをやめ、EUCのままファイルに書き出したら、こちらも文字化け(T_T)。どこで何が起こっているのかわけわかめ状態。
とりあえずUnicode標準入門注文しました。お楽しみをくっつけたので届くのは一月以上先になりそうですが(^^;)。

投稿者 idic : 22:01 | コメント (0)

2005年03月12日

ADO.NETでmySQL接続 その4

話せば長いのですが、せっかくなので残しておきましょう。
mySQLへの接続文のcharset=utf8をcharset=ujisに変更したところ、ujisなんて知らない、といわれ、確認したら、確かにujisが出てこない。で、portsでmySQLを
make WITH_CHARSET=ujis WITH_XCHARSET=all install
インストールし直す。これが泥沼のもとでした。

portsを最新にしてからインストールしたので、4.1.10がインストールされました。これが何故か起動してくれない。
今まですんなりインストールできていたので、全てが一からの泥沼状態。直接起動しようとすると、ルートで起動するのは危険だと言われmysqlにsuしようとしたら、このアカウントは一時的に使えません、と言われこれが原因だと思い込み…。アカウント削除してからインストールし直したり、自分でアカウント追加したり(^^;)。
suできなかったのは、ログインする必要のないユーザーとして作成されているらしいこと。
mySQLが起動しなかったのは、mySQLを起動するには、 /etc/rc.conf に追加しろ、と言うメッセージを見落としていたため。
苦労してやっと起動したujis版mySQLですが、.NETから接続すると相変わらず同じエラーで落ちてしまう(T_T)。
根気のない私は、またperl+UTF8の方向で気分転換。結果、こちらでうまくいきました。
ここのFAQ「version 4.1 以上の文字コード変換機能とうまくつきあうには? 」を参照、SET NAMES utf8 をCGI側に追加することで、.NETのグリッドにきれいな日本語が張り付きました。
UTF8はAxKitの初期に散々苦労したので、マイクロソフトのユニコードと標準ユニコードの違いとか、もっと根の深いものだと思ってました。まだあまりテストしていないのでぬかよろこびかも知れませんがひとまず、めでたし、めでたし。

投稿者 idic : 13:08 | コメント (0)

2005年03月19日

ADO.NETでmySQL接続 その5

DataSetとDataAdapterの関係がいまいち分かってない。
サーバーのMySQLからローカルのAccessにテーブルを反映させるのに、それぞれのDataTableを作成し、Access側のDataTableをMySQLので上書きし、Updateしても何も起こらない。常識過ぎるのか、Webで検索してもそれらしいのが出てこない。
代わりに見つけたCSVのインポートで対応することに。半角英数なMySQLの項目名を半角カタカナなAccessの項目名に変更する必要もあるし、文字化けで四苦八苦していた時に既にCSVは作成済みだったので、これが一番かも。

DELETE * FROM table1
でテーブルを空に(Accessはtruncateが使えないらしい)
INSERT INTO table1 SELECT * FROM [text;database=c:\\temp].[MyFile.csv]
でCSV取り込み。セパレータとか自動で判断してくれてるんでしょうか。

投稿者 idic : 12:47 | コメント (0)

ADO.NETでmySQL接続 完?

生まれて初めてのWindowsアプリ(一つ目のボタンでMySQLのテーブルをグリッドにコピー、ついでにCSV作成、2つ目のボタンでCSVからAccessにインポート)完成だ、とリリースしたけれど、直ぐにdllが足らず動かない、と言う報告。
MySQLのドライバがインストールされていないからとは容易に推測できるけど、dllって何?(^^;)。

クリスタルレポートをサーバーに移したら動いてくれず、苦労した記憶があるので、インストーラを作成しないと駄目なのかと思ったけれど、参照設定したMySQL.DataのプロパティのローカルコピーをTrueにして、exeと同じフォルダにコピーされたdllを一緒につければOKでした。

投稿者 idic : 18:07 | コメント (0)

2005年03月25日

DATETIME型のフォーマット

MS SQL ServerでDATETIME型の時分秒をカットする方法。
使おうと思った時にはわすれているので。
なんでこんな覚えにくい方法になってるんでしょう。

CONVERT(VARCHAR,利用開始日,111)

投稿者 idic : 18:30 | コメント (0)

2005年03月29日

実行ファイルのパスの取得

ほとんど自分用のメモと化しています。
Winアプリを作ることは今後あまりないと思うけれど、その分忘れそうなので。

ここからもらってきました。
static string GetAppPath()
{
return System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location);
}

投稿者 idic : 12:42 | コメント (0)

2005年04月11日

XP+SP2で.NETがフリーズ

正常な場合、Webサービスを呼びにいく時に、csc.exeが一瞬立ち上がり、すぐに落ちる(タスクマネージャに一瞬現われすぐに消える)のに、一部のXP+SP2マシンでcsc.exeが立ち上がったまま固まってしまうらしい。
(私はASP専門で、WebサービスのおかれているWebサーバーにASPを置き直接SQLをたたいているので、完全に他人事状態)
強制終了すれば2度目からは動く-->.NETアプリを実行する前にcsc.exeを一度でもダブルクリックしておけば大丈夫らしい。「スタートアップに入れておけば?」と言ったら白い目で見られてしまった(^^;)。
あまりにも面白い(fascinating)現象に検索してみたら、どうもこれっぽいかな。
笑い事ではなさそうな予感。

投稿者 idic : 22:26 | コメント (0)

2005年06月21日

今月の末日

特定の年と月を入力し、その月の初日と末日、次の月の初日を抽出条件に使いまくるSQLを書きました。

DateTime FirstDay = DateTime.Parse(TextBox1.Text + "/01 00:00");
DateTime NextFirstDay = FirstDay.AddMonths(1);
DateTime LastDay = NextFirstDay.AddDays(-1);

SQL Serverと似たような発想ですな。

投稿者 idic : 19:00 | コメント (0)

2005年07月10日

C# でTelnet

いつの間にかフリーのTelnetライブラリがいくつか出ているようなので、試してみることに。
自宅でやろうとしたら、これがまたまた大騒ぎ。
PC買い換えてからC#入れてませんでした。いつの話でしょう(^^;)。
インストールしようとしたら、CD-Romが見つからない。これは私が探していたのはプラケースなのに、入っていたのは紙のケースだったため。
インストールが無事すみ、こちらも久しぶりFreeBSDマシンを起動したら、なぜか設定画面になってしまい、抜けて再起動するとまた同じ画面、繰り返すこと数度で、CD-RomドライブにOSのCDが入っていることに気づく…。
無事環境が整い、http://www.whisperstream.com/software/commlib/からもらってきたCommLibに挑戦。
ヘルプはついているのですが、サンプルが見つかりません。ちょっときついかも(^^;)。
とりあえずコネクトするとノートンさんが立ち上がるので接続はできているよう。
EnableLoggingでログをとってみると半角カタカナのわけのわからない文字列がやり取りされている。色んな文字コードを指定して開いてみるも合致するものなし。
最後にはサーバー名がちゃんと帰ってきているので、接続にはいってるみたい。
また来週かな。

投稿者 idic : 21:53 | コメント (0)

2005年07月22日

int割るintはint

常識らしいんですが、Perlにスポイルされていたためか、Math.Ceiling(int型変数/15)が期待通りの動作をしてくれず(天井ではなく床になってしまう)、(?_?)状態でした。
結果をint型に保存しちゃまずい、くらいの意識はあったのですが(^^;)。

投稿者 idic : 12:46 | コメント (0)

2005年08月05日

stringは配列!?

我ながらわけのわからんタイトル(^^;)。
個人情報保護法のおかげとやらで、帳票出力の修正(名前、住所等を消し、コードをでっかく出力)があったのですが、手書きの銀行口座記入欄のような間にハイフンの入ったマス目に、どうやってぴったりと数字の位置あわせしよう?と考えたのですが、予想していた以上に簡単にできたので、思わずカキコ。

  1. 新しい帳票をエクセルファイルでもらったので、コードのマス目に0~9A~Bとそれぞれ目印を入力
  2. ここの方法でエクセルからPXDocファイルを作成。
  3. ASPのデザインのソースにPXDocファイルをベトっと貼り付け。
  4. 目印に入れた数字を探し、<%# ucode[0] %>というように、コードの入った変数の一文字目から順に置き換え
  5. 保存してコンパイル

一番衝撃たったのは、何もしなくてもコードを一文字ずつ取り出せたこと。
二番目に衝撃だったのは、エクセルから簡単にオープンオフィスに張り付いたこと。実はいままでエクセルからイラストレータにもっていくのに、PDF経由でもって行ってた(^^;)。文字がアウトライン化されたりするので、罫線部分以外は入れなおしたりしてたのに。みんな知ってたぽいけど。

投稿者 idic : 21:52 | コメント (0)

C#で置換

C#はマウスでズルズルお手軽プログラミングで、これで楽しだすとなかなか抜け出せないのですが、文字列の操作は慣れないこともあってやっぱPerlが楽だったなと。

忘れないように、自分用のメモ。

郵便番号からハイフンを削除
zip = zip.Replace("-","");

逆にハイフンを挿入する場合
zip = Regex.Replace(zip, @"(\d{3})(\d{4})","$1-$2");


基本的にはPerlと同じなんですがねぇ。

投稿者 idic : 22:20 | コメント (0)

2005年08月06日

&nbsp;のエラー回避

ASP.NETで、SQLの結果をデータグリッドに貼り付け、行の先頭にチェックボックスを表示、チェックを入れた分だけを、データグリッドからデータを読んで、PXDocで印刷、というパターンが多いのですが、問題が一つ。データグリッドにNULLが貼り付けられると、&nbsp; になり、それを読みPXDocに持っていくと、XMLの文法エラーになってしまいます。で、空で帰ってくる可能性のある項目が少ないうちは、プログラムで置換していたのですが、多くなると面倒なので、最近はPXDocに下記を追加し、全角スペースに置き換えています。

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
<!ENTITY nbsp " ">
]>

投稿者 idic : 18:17 | コメント (0)

2005年08月31日

SQL ServerからMySQLへの変更

using System.Data.SqlClient; を using MySql.Data.MySqlClient; に変更
参照設定で、MySql.Data.dllを追加。ローカルコピーを忘れずに
SqlConnection を MySqlConnectionに変更
SqlCommand を MySqlCommandに変更
getdate() を curdate() に変更

漏れ落ちあるかも…。

投稿者 idic : 16:59 | コメント (2)

2005年09月02日

SQL ServerからMySQLへの変更2

MySQLのインストール時、「Enable TCP/IP Networking」をOFFにしたら、接続時に protocol=pipe を指定しないと駄目らしい。
コマンドプロンプトから起動する時は、C:\>mysql --protocol=pipe -u root -p
プログラムから接続する時は、接続文に protocol=pipe; を追加。
参考はこちらの「Windows上でMySQL サーバーをセキュアーにする方法

で、新しくたてたMySQL+IISサーバでWebサービスを動かそうとしたら、「指定されたキャストは有効ではありません。 」というわけの分からないエラー。行数からしてMySQLへの接続部分で出ているよう。
これもググるとヒットしました。非常に便利な世の中になりました。
MySQL4.1.14にすると、MySQL Connector/Net 1.0.4ではこのエラーが出るらしい。1.0.5では対応済みということで無事動きました。

心配していたよりもすんなりと移行は完了しましたが、サーバーエクスプローラが使えないのが不便かも。SQL文を書くときにはお世話になりっぱなしだったし(^^;)。
あと、文字コードをUTF-8にしたので、コマンドプロンプトの画面で日本語が表示できないこと。何とかする方法あるんでしょうか?Telnetで接続する場合は、UTF-8対応のテルネットクライアントを使えばいいですが…。

投稿者 idic : 18:11 | コメント (0)

2005年09月03日

Visual Studio .NET IDE for Linux!

Visual Studio .NET IDE for Linux!だそうです。

  • Visual MainWin for J2EE(別名Grasshopper)という、Visual Studio .NETのプラグインみたいなものの宣伝らしい。
  • for Linuxと書いていますが、C#のコードをJ2EEな環境(Tomcat、WebLogic、WebSphere等)で動くようにコンパイルしてくれるらしい。
  • フリーのデベロッパーバージョンでは、Tomcatしか対応していないらしい。
  • MicroSoft ではなくMainSoftがやっているらしい(読み違えてマイクロソフトは何を考えとんじゃ、と思ってしまった)
面白そうだけど、Java Serverはハードもソフトも高くつくお金持ち専用のイメージ。外側は当分PHPの天下が続きそう。AxKitもいいよ!マイナーだけど。

投稿者 idic : 13:41 | コメント (0)

2005年09月05日

ICSharpCode.SharpZipLib

using MySql.Data.MySqlClientしているプログラムをコンパイルすると、途中でICSharpCode.SharpZipLibが見つからない、というメッセージが表示されます。
動作には問題ないので、気づかなかったのか、それとも1.0.5にあげてからなのか。
PC内を検索すると、ICSharpCode.SharpZipLib.dllがあちこちにみつかりました。ICSharpCode.SharpZipLibとMySQLでググるとこれもたくさんヒットしました。
MySQL Connector/Net1.0.5に付属指していた分を参照で追加するとメッセージは消えました。

投稿者 idic : 12:57 | コメント (0)

2005年09月12日

仕様ですか?

ASP.NETで、DataGridの各項目の値に配列ではなく、項目名で直接アクセスする方法が分からない。
DataGridの並びを変更して欲しい、項目を追加して欲しい、という要望は結構あるけれど、非表示も含め30近い項目を持ちまわっている場合など、思わず顔が引きつりそうになる(^^;)。
コードプロジェクトにはこんな力技が掲載されていますが、ということは、配列でアクセスする方法しか準備されていない、ということでしょうか? ちょっと信じられないんですが…。

投稿者 idic : 17:58 | コメント (0)

2005年11月03日

C# でTelnet その後

何とかサーバーにログインし、コマンドを叩き、結果をラベルに表示し、接続をクローズするところまでこぎつけました。
一番最初のつまづきは、loginメソッドを探したこと。これがいくら探しても見つからない(多分ないはず)。
しょうがないからSendを使ったのですが、戻り値がなぜかこちらから送ったのと同じものになる。そりゃ普通telnetウインドには入力したまま表示されますがね、プログラムでは返して欲しくないの(^^;)。
よくわからないけれど、OptionNegotiationEnabledをtrueにしたら、こちらが望むと通りの結果が返ってくるようになった気がする。
次は、ログインIDを送信するタイミングですが、Sendだけだと、このタイミングがどうしてもうまく取れない。ログを見ると、何度も何度もログインIDを送ってしまっていて、やりとりがちぐはぐになってしまってる。
こちらは Data_recived というイベントがあったので、これをif (e.ReceivedData.ToString() == "login: ") でキャッチして、あとはSendだけでほぼやり取り完了。Sendするstringの最後に\nをつけておく必要があるところでいったんはまりましたが。
Sendの戻り値がstring型だったので、どうなんだろうと思っていた複数行の表示も、ラベルに貼り付けると自動で改行されてました。
Perlとは随分感覚が違いますが、これはこれで使えそう。

投稿者 idic : 20:35 | コメント (0)

2005年11月05日

初めてのDLL

Perlの場合、まずCPANへ行って、自分のやりたいことが既にモジュールとして提供されていないかどうか確認するのがプログラムの第一歩でしたが、.NETの場合はフリーで提供されているDLLがそれに相当するんでしょうか。3Dグラフの作成や、この間のTelnet接続など結構便利で、オブジェクトプログラミングのことは詳しく分からないけれど(^^;)、このやり方なら比較的簡単にコードの使いまわしができるんではないかと思い、DLL作成に初挑戦。
きっかけは、以前にやった宛名のラベル印刷をSQL文だけ変えてまた作れ、といわれたこと。使用するラベル用紙が変わったら一つ一つソースを修正して回るんだろうか、と思うとDLLに挑戦する意欲もわくというもの。
今までにわかったこと


  • 複数のプロジェクトからなるソリューションを作る時は、まず空のソリューションを作ってからプロジェクトを追加していく方が一つのフォルダにまとめやすい。
  • DLLとしてコンパイルしたい場合は、プロジェクトを新規作成する時に「クラスライブラリ」を選択すると自動的にDLLになる。
  • しかし、先に「クラスライブラリ」のプロジェクトを作成すると、まずそちらからコンパイルされるので、呼び出す側のプロジェクトをスタートアッププロジェクトに指定する必要がある。
  • PXDocにはlengthAdjustという便利な機能がある(文字数を計算してフォントサイズを調整しなくても、横幅XXcmと指定しておくと、収まるように自動的にフォントを下げてくれる!)

で、わけわからないまま、えいっやっ、でDLLを作ったらいっちょまえに動くじゃないか(^^;)。
newしてmyLabelにドットをつけると私の作ったクラスであるにもかかわらずちゃんとzipやName1が選択できるじゃないか(^^;)。C#敷居低い! まじめにオブジェクトプログラミング勉強してみようかという気になりました。とりあえずこのあたりから。

投稿者 idic : 12:43 | コメント (0)

2005年11月16日

VB6.0からWebサービスにアクセス

Microsoft SOAP Toolkitと言うのを使えば簡単にできるようですね。
サンプルも一緒に配布されていて、wsdlにも対応しているみたいです。
曖昧な言い方なのは、職場のも自宅のも私のPCにはVB6.0が入っていないため。時々ブログネタを提供してくれる、隣席のお嬢が、サンプルが見つからないというので探すのを手伝ったまで。
いったいどこを探していたのか、という突っ込みは置いておいて(^^;)、ダウンロードしたサンプルを適当に開き、できそうだと判断しほらこれでいけるやろ、と見せたのがwsdlを使わないLow level APIの方だったため、半日ほど苦労したみたい(^^;)。
簡単にできる方法があるのに、なんでわざわざLow levelなサンプルがあるのか、と言われ一瞬ごもっともと思いましたが、多分世の中にはまだwsdlを知らないWebサービスもあるんですよ、お嬢さん。

投稿者 idic : 20:52 | コメント (0)

2005年11月25日

C#でエクセルファイル作成

CSVを書き出しているプログラムで、コード別にCSVを複数枚書き出すように変更して欲しいといわれ、ボタン一つで対応させるため、CSVからエクセルのファイルに変更してみようと思ったところ、予想外の深みにはまる。
Webのサンプルを覗きまわった限り、CSVより簡単?という印象だったんですけど。
まず、最初のエラーが「型または名前空間名 'Excel' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。」というやつ。usingし忘れた時によく出るエラーですが、色々試してもエラー変わらず、ググッてこちらのサイトのおかげで解決。Webから拾ってきたサンプルに付属していたDLLは Interop.Excel.dll でこれを参照追加するとusingなしでもエラーが出ない。COMから参照追加してコピーされたDLLは Microsoft.Office.Interop.Excel.dll という名前になっている。このあたりが原因?
で、無事エクセルの空ファイルができたので、ASP.NETに貼り付けたところ、今度はアクセス権がない、というような実行エラー。こんどはこちらのサイトを参考にWeb.configに<identity impersonate ="true">を追加して解決。しかし、このサイトに嫌なことが書かれてます。作るのは簡単だがExcel.exe のインスタンスgo away するのが難しいって(^^;)。書いてある通りタスクマネージャを確認すると、エクセルが複数立ち上がってるではありませんか。サーバー側にファイルができるわけで、CSVをダウンロードさせるのとはかなり違いそうですね。ってことでせっかく方法書いてもらってますが、いままで通りCSVでいくことにしました。

投稿者 idic : 22:07 | コメント (0)

2005年11月27日

C#でヒアドキュメント

条件抽出してラベル印刷、のASPに、封入する「○○様」入りの文章をついでに印刷できるようにして欲しい、と言われ、ワープロの差込印刷じゃだめなんでしょうか?とはじき返そうとしたのですが、ついでじゃ、やれってことに。
しかし今後文面の変更、レイアウトの変更等更新が頻繁にきそうな予感。で、できるだけ今後も更新作業ができるように、ワードで作成してもらったファイルをPXDocに変換、余分な修正はいっさいせずにヒアドキュメントでぺしっとソースに貼り付け、でいきたいと思いヒアドキュメントで検索。
ヒアドキュメントで検索してもheredocumentで検索してもヒットする件数があまり変わらず、ヒアドキュメントって日本専用?と思ったら間にスペースが入ったり、ハイフンが入ったりするケースの方が多そうですね。
という余談はおいておいて、結果はSQL文やファイル名を指定する時に使う@"ほげ"しか見つからない。区切り記号を自分で指定できるようなのはないんでしょうか?
今回はしょうがないのでPXDocファイルのダブルコーテーションをシングルに置換して@"ほげ"で貼り付け。ワード文章に入っていた会社のカラーロゴも含め、どちらで印刷したかわからないほどのそっくりな仕上がり。ソースを見ると、PXDocファイルに余分なタグが入りまくりですが、まあ、更新の迅速さ優先ってことで。

投稿者 idic : 12:43 | コメント (0)

2006年01月05日

ASP.NETでDateTimePicker

抽出条件に日付を使うことが多いのですが、PHP使いから、ASPでもポップアップのカレンダーから日付を選択できるようにできないのか、といわてしまいました。XOOPSのpiCalでも使われているあれですね。
カレンダーコントロールの存在は知っていたので、できるはず、と返事して調べて回ると、カレンダーコントロールをJavaScriptでポップアップされるタイプのものがヒットしました。1箇所に付けると、あちらからもこちらからもご要望が出そうでJavaScriptをコピって回るのやだな、と思ってさらに検索を続けると、WindowsアプリにはDateTimePickerとそのものずばりのコントロールがあるらしい。で、今度はDateTimePickerとASP.NETで検索すると、コードプロジェクトにありました。ラッキー!と思ったわりには半日仕事だったのでポイントをメモ。
まず「指定された引数は、有効な値の範囲内にありません。パラメータ名 : Year、Month および Day パラメータが表現できない DateTime を示しています。」のエラー。どうも原因は日本語版と英語版のカレンダーコントロールの違いかなぁ(全然自信なし)。ダウンロード先にある画面キャプチャの日付が 4/22/2004 になっているのに、自分で実行すると 2006/01/05 となるのがその根拠。で、ソースを開き、Yearで検索したら year=Convert.ToInt32(cons[2]); というような箇所が2箇所あったので、この並びを変えてやろうじゃないかということに。結果的に下記でうまくいきました。

year=Convert.ToInt32(cons[0]);
month=Convert.ToInt32(cons[2]);
day=Convert.ToInt32(cons[1]);

これで無事例題が動き、カスタムコントロールに追加でき、使いたいプロジェクトを開きコントロールをボトっとドロップ。出来た出来た!で、実行したら今度は「オブジェクト参照がオブジェクト インスタンスに設定されていません。 」というエラー。これも意味不明だったのですが、例題がGridLayoutだったので、FlowLayoutからGridLayoutへ変更したら動きました。カレンダーコントロールを表示する座標を、コントロールに記述された絶対座標から読んでるのかも。
結局やっていることは同じなのですが、カスタムコントロールになっているのは非常に便利です。

投稿者 idic : 20:45 | コメント (0)

2006年01月07日

ASPのファイルアクセス権

いつもは既に存在するSQL Server上のDBを読みにいくだけ、という仕事が多いのですが、DBを一から構築することになり、サーバ上にDB作成してもらう前に構造を試行錯誤したいために、とりあえずPC上のAccessを使うことに。C#を使っていても、直感的に組んでいくPerlの癖が抜けません(^^;)。
WindowsアプリからAccessにアクセスしたことがあったので軽く考えていたら、「ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」のエラー。調べたらよくあるエラーのようです。ASP.NETを実行するユーザaspnetに対し、Accessファイルの権限を与えてあげないといけないらしい。
確かにサーバではaspnetというユーザを見たことがあるけれど、XPなので、どこにaspnetユーザが登録されているのかわからない。わからないまま、ファイルのプロパティの「セキュリティ」のところでそのまま入力するとエラーが消えました。

投稿者 idic : 20:13 | コメント (0)

DropDownListにDataSetをバインド

しようとしたら、なぜか「System.Data.DataRowVies」がずらっと貼り付けられる。しょうがないからDropDownListとSELECT DISTINCTで検索。オフィシャルのページがヒットしました。DropDownListの方に datatextfield="都道府県" というようなのを追加しておく必要があるらしい。なるほど、ごもっともという感じ。

投稿者 idic : 20:26 | コメント (0)

2006年01月12日

複数テーブルの取得

テスト環境でSQL Serverの代わりにAccessを使っているのですが、複数テーブルを一度にデータセットに落とそうとしたら、なぜか「SQL ステートメントの後に文字が見つかりました。」のエラーが出てしまう。
検索するとAccessのエラーメッセージがそのまま出ているよう。複数のSQLを一度に投げるには、DB側が対応していないとダメってことなんでしょうか。MSDEを入れようか、とも考えたのですが、どちらにせよ本番環境に移行するには書き直しが必要なので、手っ取り早くDataAdapterを別々にしてお茶を濁すことにしました。調べてる暇にコピーできるし(^^;)。本当はどうなんでしょう。

投稿者 idic : 21:53 | コメント (0)

2006年01月16日

ASP.NETでモバイル用Webアプリ

使えねっ~!と言うのが初日の感想なんですが、皆さん使っておられるんでしょうか(^^;)?
デフォルトで文字コードがShift_JISになってる、セッションがクッキーレスになってる、のここまではOKだったんですが、最初のつまづきは、フォーム認証のチケットがすべてエンコードしてURLに埋め込まれること。設定間違ってるんですかね? URLが長くなりすぎてロール認証が使えません!
しょうがないから、認証用のWebサービスを、id、パスを送ればロールのリストが返ってくるタイプのものから、id、パス、ロールを送れば認証フラグが返ってくるものに変更し、ユーザ単位のフォーム認証に変更。とりあえず携帯からアクセス許すプログラムは1本だけなので、今回はこれでよし、と思ったら、入力モードの切り替えが予想とは全く違う。なんですか、これは。
numericをtrueにすると、自動でistyleが4になるのは期待どおりですが、passwordをtrueにしたらistyleを3にしてよね(^^;)!
機能調べてるくらいなら、自分でHTML書いた方が早かったかも、というのが素直な感想。

投稿者 idic : 23:35 | コメント (0)

2006年01月18日

ASP.NETでモバイル用Webアプリ その2

二日目の感想も相変わらず、使えねっ~!
入力チェックの正規表現で英数に制限したらistyleが3になるかな?(^^;)という微かな期待も空しく終わり、フォームにRepeater コントロールを入れようとしたら、文句を言われ、データセットをバインドする適当なコントロールが見つからずで根気がちぎれ、もう嫌じゃ、通常のWebフォームでいったる、ということになり、一応フォルダを別の場所に退避し、新たな気持ちでつくり直し。
istyleを使うためHTMLタグを使ったら、入力バリディエイタ使えず。しょうがないから通常のテキストコントロールに変更し、istyle="3" を強制的に追加。これがコンパイルするとちゃんと残ってる。で喜んで仕上げてPCで動くことを確認し、サーバーに移し、auで表示するとちゃんと動作する。最初からこうすれば良かったぁと叫んだのもつかの間、i-modeではサーバエラー、Vodafoneではログインできず。どちらもエミュレータからですが、文法チェックでエラーでまくり。見かけはそっくりでもソースの重さがモバイル用で作った時と全然違うみたいですね。サーバーうにっくす系に変えてもらおうかなぁ、と思っているところ…。

投稿者 idic : 00:21 | コメント (0)

2006年03月13日

Form認証でログイン中のユーザID取得

直ぐ忘れるので…

string loginID = User.Identity.Name;

投稿者 idic : 18:25 | コメント (0)

2006年03月17日

ASP.NET 2.0

更新系のASPを作成しようと、「一覧」「詳細」で検索中ASP.NET 2.0だと簡単だと知り、
Visual Web Developer 2005 Express Edition 日本語版を入れてみた。
1日目の感想は、何この便利さ!?
Accessのテーブルからウイザードでフォームを作るようなイメージ。
キーボードが利かなくてもマウスだけで検索・抽出、表示、更新、新規追加の機能を持つページが簡単に出来てしまいます。
しかも無料で使えるっぽい。Webアプリでは無料のPHPやPerlがやはり主流なのを、巻き返しに来ているんでしょうか?
ユーザーを増やしてサーバを買わせようという魂胆か知らん?

投稿者 idic : 12:41 | コメント (0)

2006年03月19日

ASP.NET 2.0その2

昨日はちょっと興奮気味で、ほめすぎましたが2日目の感想は重い!
会社のPCは結構贅沢仕様にしてもらってるんですが、VS2003に比べて非常に反応が鈍い時がある。
でもそれ以外はやはり凄い。結構合理的に出来ている気がする。
実行の方は扱っているのが千件未満のデータなこともあって結構さくさく動いています。

マウスだけでかなりのプログラミングができるけれど、生成されたコードはタグばかり。
なんとなく感じとしてはタグリブ+JavaScriptという感じ。
XSPのESQLを使った時も、衝撃的でしたが、それと似たような感じ。
JavaScriptな感じがするのは、AxKitならXSLTで処理するような部分が、イベントハンドラにコード埋め込み、と言う形になるからか?

心配していた1.1との共存も、IISの仮想ディレクトリ単位でどちらのバージョンを使うかできるため、どちらも問題なく動いています。

で、本格的に作り始めて、更新日入力欄に自動で本日の日付をセットしようとしてつまづき中。
明日から3連休のため、自宅PCに入れようとしているところですが、果たして6万円のPCで動いてくれるんだろうか(^^;)。

投稿者 idic : 00:18 | コメント (0)

2006年03月20日

ASP.NET 2.0 その3

急がば回れってことで、こちらで勉強中。
重いのは重いです。デザインビューとソースビューを切り替えるのにさえちょこっと時間がかかる(^^;)。
今DBに接続しようとして接続できず、再起動したところ。原因は、スラッシュとバックスラッシュを読み間違えていたこと。localhost/sqlexpressをlocalhost\sqlexpressに変更したら接続できました(^^;)。
上記のページ探すの大変だったので、ブックマーク代わりにカキコです。

投稿者 idic : 15:03 | コメント (0)

2006年03月22日

ASP.NET 2.0 その4

自宅のPCで例題やった時はちゃんと動いたのに、職場で実際のデータでやると、XMLをDataSetに変換できません、というエラー。SQLサーバーのテーブルの定義が悪いのか?等々悩んでいたらバグだそうです。バーロー!

投稿者 idic : 23:23 | コメント (0)

2006年03月23日

ASP.NET 2.0 その5

手抜きするため2.0にしたはずが、あまりの違いに苦戦中。こんなことなら、自分でしこしこリピータ書いていた方が速かったかも、などと迷いつつもいつか通る道と言い聞かせとにかくこのままいっちゃうぞ、と腹をくくったところです。
本日は、本番用データでUPDATE用のメソッドに挑戦したわけですが、例題の

void UpdateAuthor( ここ string au_lname, string au_fname, string phone, string address, string city,
string state, string zip, bool contract, string Original_au_id)

に元のIDがないのに気づかず、エラーだしまくり。項目名が全部日本語なのが原因か、と疑ったり。
無事更新可能になった後は、更新日 = DateTime.Today; で更新日を上書き。FormViewに何を入れようが無視して上書きですが(^^;)、外に出すわけではなしこれでいくことに。

更新系が使えることがわかったので、今度は1.1でやっていた一覧リストを2.0用に書き直し。
ドロップダウンリストで市町村を選択、テキストボックスで名前の一部を入力、入力があったものだけ使い、どちらも空だったら全リスト表示、なのですが、1.1では入力をチェックし、空かどうかでSQL文を作成していたので、その部分をどうするかわからず、四苦八苦。asp:ControlParameterのConvertEmptyStringToNullをfalseにしちゃると、似たようなことが可能でした。しかし、今現在ページを開くと全リストが表示されます。検索ボタンを押した時にだけ、バインドするようにしたいんですが、良くわかりません。まあ、何とか使える状態にはこぎつけましたが(^^;)。
VSのドキュメント読みなれてないのがきついです。PerlモジュールのPODならわかりやすいんだけど。

投稿者 idic : 23:22 | コメント (0)

2006年03月24日

ASP.NET 2.0 その6

もう1.1には戻れないかも(^^;)。やっぱり便利だわ。重いけど。
下手に自分でコーディングしようとしない方が、後々楽だという気がしてきた。ツール使ってプロパティ設定して、足りないところ・気に入らんところは、タグリブを自分で作成するように、コントロールやクラスをちゃんと自分で作っとく。
ただ、マウスでプログラミングの怖さというか、気がつかないうちにViewがMultiViewの外に移動してしまっていたりしてわけのわからないエラーが出て、ひたすらUNDO繰り返したり(^^;)。
まあ万一修復不可能なほど壊しても、一から作るのがそれほど苦痛じゃないですが。

投稿者 idic : 22:53 | コメント (0)

2006年04月06日

ASP.NET 2.0 その7

なんとか最低限の機能をつけ、サーバーへアップし、無事動くことを確認し一安心していたら、今まで動いていた古いプログラムが動かなくなった、というお知らせ(^^;)。
私のPCでは2.0と1.1が共存できています(確認する前に開発に使ったりしません)、他のフォルダの設定などいじってません、濡れ衣です、といったのですが、仮想ディレクトリのASP.NETタブのバージョンを戻すとと旧プログラムが復活するし、イベントログを見ると「バージョン違いは共存できません」というようなメッセージ。
原因はサーバのIISが6だったこと。アプリケーションプールというのを2.0用に作ってあげればさくっと動きました。ASP2.0のバージョン違いの共存で「サーバー アプリケーションは使用できません。」が出たら、アプリケーションプールの追加です。次回引越し時にはご用心。

投稿者 idic : 23:04 | コメント (0)

Webサイトの公開

サーバへのコピー方法が今までと感じが違う。「実行に必要なファイルのみをコピー」に相当するものが見つからない、と思っていたら、VWDではコンパイルしてくれないらしい。サーバにもソースを含め丸ごとコピーが必要らしい。一瞬、印刷機能のないお試し版ワープロソフトを連想してしまいましたが(^^;)、PerlやPHPと同じと思えばこれもありでしょう。
コピー前にはバージョンチェックもやってくれるし、サーバのソースが最新、というのは結構便利かも知れません。

投稿者 idic : 23:21 | コメント (0)

2006年05月23日

ASP.NETのPOST

他のページとのPOSTでのやり取りがいまいちよくわかりません。
出来るのか、やり方を知らないだけなのか。GETのサンプルはあちこちで見かけるのに、POSTを使ったやりとりのサンプルを見かけない。1.1では自ページにしかポストバックできないにしても、GETが受け取れるのなら、POSTが受け取れないはずないと思うのですが。
TextBox1.Text = Request["hoge"];
でやるのかと思ったけど、cookieless="true" にしたとたん空になるし。CGIの経験からすると、POSTとcookieが絡むなんてありえないこと。QueryStringのように直接取り出したいんですけど。
CGIならまずPOSTの取得とデコードの方法から始まるのに。

投稿者 idic : 22:28 | コメント (0)

2006年05月27日

ASP.NETのPOST その2

cookielessがtrueでもPOSTが使えるようにするには、こんなことをする必要があるらしい。これを見つけてからもマジですか?と信じられず、あちこち探し回るも代わりにすぐ使えそうなものがなく、仕方なくコピらせていただく。mod_perlでApacheのリクエストオブジェクトいじる感じ? web.config見直せ、というエラーでうまくいかず、ここを参考にdllを別に作成する方法でやったらうまくいきました。
JavaScriptを使っているのが気になりますが(CookieがOFFでJavaScriptがONってそんなにあるのか?)、引継ぎ前のページが結構JavaScript多用で、JavaがOFFならたどり着けないはずなので、ということで今回はこの方法を使わせてもらいました。
なんか簡単なことは凄く簡単なため、ちょっと外れたことをしようとすると、大変さが身にしみる…。

投稿者 idic : 23:12 | コメント (0)

2006年06月15日

ASP.NETのロギング

ラベル印刷等を行っている業務用ASPに誰がいつどんな抽出を行ったか、ログに保存する機能を追加することに。理由は推して知るべし(^^;)。いや~な世の中ですね。まったく。
ググってここを参考にコーディング。
時間、IPアドレス、URLは簡単に書き出し。ログイン中のユーザーを書き出ししようとしたら、Request.ServerVariables["AUTH_USER"]で取得できるはずなのに、なぜか空。コードの記述場所をApplication_EndRequestに移動して無事ゲット。
お次はPOSTされるフォームの値が欲しいところですが、CGIなら$ENV{'QUERY_STRING'};で取得できるのに、ASPの場合は、Request.ServerVariables["QUERY_STRING"]はURLの?の後ろしか取得できないもよう。
明日にしようかな、と思いかけた時に思い出したのが、クッキーレスのPOSTでお世話になったコード
Request.Formオブジェクトをforeachしてペアで書き出せば簡単なのでした。
勝手に作成されるVIEWSTATEとパスワードがロギングされないように
((formname != "__VIEWSTATE") && (formname != "txtPassword"))を条件に追加。
文字化けしているボタンのバリューも省こうかと思ったのですが、これは一つのASPに複数ボタンが存在する場合のことを考え残すことに。
残る課題は、フォームコントロールにはちゃんとした名前をつけましょう(^^;)。TextBox1=2006/05/01たらTextBox2=2006/05/31たらが並んでいるのはどうなの?

投稿者 idic : 21:45 | コメント (0)

2006年07月24日

Javaサーバと接続テスト中

WSDLが、ファイルで送られてきた。かなり色んなパラメータ渡すはずなのに、types要素がないんですけど。こんなのあり?
とりあえずwsdl.exeが必要になりそうなので、PC内を検索
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin

投稿者 idic : 15:27 | コメント (0)

2006年07月26日

Javaサーバと接続テスト中 その2

DTDファイルがついてきていたので、嫌な予感がしてたのですが接続先から返ってきた回答はビンゴ!こちらから送信するのは1つのstring型にXMLファイルを丸ごと埋め込み! 返ってくるのもstring型一つにXMLファイル埋め込み! 笑うしかない。いやしょっちゅうデータセット投げてるから人のことはとやかく言えないけど。
WSDLから変換できないなら、なんとかDTDから変換できないものかとツールを探す。まずDTDをXSDに変換できるツールを発見。コメントにうまくいかないよ、というのがいくつか付いていたのでちょっと不安だったものの特にエラーも出ずXSDに変換(これ以外にもdtd2xsdで探せばPerl版とかもいっぱいありました)。これをフレームワーク付属のXSD.exeでクラスに変換。それらしいコードができあがりました。
XMLの宣言からDOCTYPEまで付いたXMLファイルをSOAPのBodyに埋め込んでエラーが出ないのか?という疑問もあって.NETでstringを受け取ってそれをそのまま返す超シンプルサービスを書き、実際にXMLファイルをほうりこんでみたら、難なく動きました。ひょっとしてXMLをそのまま投げる、という手法は結構一般的なのか!?

投稿者 idic : 21:26 | コメント (0)

2006年07月28日

Javaサーバと接続テスト中 その3

XSD.exeで作成したクラスに値をセットする際、ルートノードぽちとすると子ノードの一覧が表示され、子ノードを選択後、ぽちすると孫ノードの一覧が表示され、という期待通りの動きで、楽勝じゃん、と思って実行したら、コンパイルの時にはエラーが出なかったくせに、「オブジェクト インスタンスなんたら」という例のエラーが…。子ノードもnewしてやるとエラーは消えたものの、書き出されたXMLは親ノードのみ。親子関係の指定を自分でしてやらないとだめなようだけど、指定の仕方がわからない。
とりあえず一番先に思いついた方法で
my親ノード.子ノード = my子ノード;
を追加したら、無事すべてのノードが書き出されました。
後は、ひ孫、やしゃ孫まである分を処理しなければ行けないということと、出力されるXMLの制御。デフォルトだと、スキーマへのリンクが貼られているけれど、これをDTD付きDOCTYPEに変更しないといけないのだけど、出来るのか? 来週はこのあたりのお勉強かな。
 

投稿者 idic : 11:31 | コメント (0)

2006年07月30日

Javaサーバと接続テスト中 その4

このあたりを勉強、とかいっておきながら勉強せず、ググッて解決(^^;)。DOCTYPEの方は、XmlSerializerとDOCTYPEで、ネームスペースの除去の方はXmlSerializerとC#とxmlns:xsd=とremoveでめでたくここがヒット。

参考にして出来上がったコードはこんな感じ。

XmlSerializer serializer = new XmlSerializer(typeof(hoge));
TextWriter w = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(w);

// standalone="no"
xw.WriteStartDocument(false);

// DOCTYPE
xw.WriteDocType("hoge",null,"hoge.dtd",null);

// ネームスペース除去
XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
xsn.Add(string.Empty, string.Empty);

serializer.Serialize(xw,myData,xsn);

今度はナメてた受信で苦戦中。Deserializeすると「XML 宣言は使用できません」というエラーが出る。検索しても出てこない(泣)。

投稿者 idic : 10:10 | コメント (0)

2006年08月06日

Javaサーバと接続テスト中 完

Webサービスで受け取ったXMLのクラスへの変換がうまくいかない。返ってくるXMLを一旦ファイルに保存し、それをDeserializeするとエラーは出ず。あるいは返ってくるストリングからXML宣言とDOCTYPEを省くようにすれば、直接XmlReader経由で受け取ってもエラーが消えるから、ちょこっとしたオプションで解決できるはずだと思うのだけど…。
盆明けにはもっとプロフェッショナルなプログラマに実際のコーディング部分を引き継ぐことになっていることと、他に仕事がないわけじゃないので、しょーがない、ここは手っ取り早く受け取ったストリングからXML宣言とDOCTYPEを置換で削除(^^;)。
後はお任せで投げることにしました。

投稿者 idic : 13:22 | コメント (0)

2006年09月16日

ASP.NET用自前証明書のインストール法

Javaサーバーとのテスト中、証明書をちゃんとインストールしたはずなのに、セキュアな通信が確立できないエラー。
念のためブラウザからWebサービスのアドレスに直接アクセスすると、通販サイトなどでも良く出る「保護されていない項目が含まれています」の警告。ソースを見ると、ウェブロジックのBEAのロゴマークにhttpでリンクされている。てっきりこれが犯人かと思ってしまい、相手側担当者に画像を外せないか、httpsでリンクできないか、と掛け合ってしまいました(^^;)。
原因は、ルート証明書のインストールをユーザーアカウントに対して行い、コンピュータアカウントに対して行っていなかったため。画像の警告出てても通信には問題なし。
正しい方法はこちら。騒ぎまくって恥じかいたため、二度と忘れない気がする。

投稿者 idic : 22:23 | コメント (0)

2006年11月19日

PageScrollManager

ASP.NETの編集モード等でボタンを押すたびにページの一番上に戻ってしまうのを、1.1で防いでくれるコントロールがこれ。ASPのページに貼り付けるだけ。簡単便利なすぐれものです。感謝感謝。

投稿者 idic : 17:34 | コメント (0)

2006年12月06日

MySQL Connector/Net

MySQL Connector/Netを使って別のサーバーにあるMySQLに接続しようとしたら、「ソケットが接続されていないか、sendto 呼び出しを使ってデータグラム ソケットで送信するときにアドレスが指定されていないため、データの送受信を要求することは禁じられています。」という初めて見るエラー。権限の設定をちゃんとしてくれているかどうかAccessからODBC経由で接続とPerlのDBIで接続したところどちらも「Can't connect to MySQL server on 'hogehoge' (10065) 」というようなエラー。このエラー番号がなぜかMySQL全機能リファレンス を見ても見つからず。困った時のGoogle頼みで、結果はファイヤーウォールとのこと。サーバー側でポートに穴を開けてもらって無事解決。
エラーコードはどうやらこれみたいですね。そりゃMySQL関係を調べていても見つかりませんわ。

投稿者 idic : 12:44 | コメント (0)

2007年02月22日

Mono

ネットサーフしてたらMonoの話題が目につきました。記事の中身はVisual Basic 8.0のコードを修正せずLinux、UNIXで実行できるとのことでしたが、特にNovellという名前が目を引きました。.NET用のLDAPモジュールでは随分お世話になりました。ドキュメント、サンプルともに完璧で今まで使ったフリーのモジュールでは最高レベルの親切さでした。

投稿者 idic : 12:49 | コメント (0)

2007年03月19日

久しぶりにASP.NET2.0

半年ぶりくらいでしょうか(^^;)?ちょこっとカスタマイズ作業が入りました。
全然記憶に無いのですが、ほとんど自動化でソースが短いため思ったよりも短時間で対応可能でした。
で思い出したついでに別に依頼のあった検索系の画面もこちらでやろうということに。もう直ぐシステム全体が2005に変わりそうなことでもあるしで。
市町村単位で抽出と郵便番号で抽出の2通り用意してといわれ、Gridviewのデータソースをcs側でバインドしたら何故かソート機能が使えなくなってしまう。
何か指定が抜けているだけだと思うのだけど、ソートする程の件数でもなかったのでこれはちょっと持ち越し。

投稿者 idic : 12:50 | コメント (0)

2007年05月14日

Mono on FreeBSD

2007/02/22のエントリーで触れたMonoですが、FreeBSDのportsもちゃんと存在するようですね。wwwの下で探していたのですが、langの中でした。XSP web serverも付属しているようなので、ASP.NETも動くらしい。連休前に分かっていればちょっとは遊べたのに。そのうち試してみたいと思います。

投稿者 idic : 23:24 | コメント (0)

2007年06月01日

Visual Studio 2005

ぼつぼつ移行の時期ではないかということで、職場のPCに2005を入れてもらいました。Visual Web Developer 2005で作成したアプリ一つと2003で作成していたWebアプリを一つそれぞれ読み込んで見ましたが、どちらも何の修正もなく動きました。
2003からコンバート後のソースを見てもどこをコンバートしてくれたのか良くわかりません。なくなったと思っていたDataGridもちゃんとそのまま動いているし。どうやらツールボックスから消えただけみたいで、手打ちすると候補の中にあがってきます。
心配していたMySQLのモジュールもちゃんと動いているようだし意外と移行はすんなり終わりそうです。

投稿者 idic : 21:17 | コメント (0)

2007年06月05日

入力xmlファイルの内容をDataSetに変換できません

久しぶりにASP.NET 2.0の新しいプロジェクトを作成しDataSetを作ろうとしたら

入力 xml ファイルの内容を DataSet に変換できません。
先頭 '0'(16進数値 0x30)を使用することはできません。

というエラー。調べまくって文字コード系のバグだとわかり、以前に作ったプロジェクトをのWeb.Configをのぞいたらちゃんと<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>の行があるではありませんか。こんな話をブログに残さないはずがない、とおもったらちゃんと書いてるし(^^;)。全然記憶にないのが怖い。

投稿者 idic : 23:14 | コメント (0)

2007年06月29日

Webインターフェースとのシステム連携

何をやっているかというと、既存のWebインターフェースのシステムに、DBから読んだ値を自動で貼り付けられないかと。
JavaScriptでウインドウ名をつけて子ウインドウをオープンし、値を送りつけるか、.NETでブラウザになりすますか、くらいしか思いつかなかったのですが、JavaScriptでWindowオープンの方は、子ウインドウに読み込むページが同じサーバーなら問題なく動きますが、別のサーバーにあると値の貼り付けも取得も「アクセスが拒否されました」のエラーになってしまいます(同じサーバーにあったら直接DB読むっちゅうねん)。
ブラウザなりすましは、Webシステムから返ってくるエラーを全部チェックし、完全自動化しない限り通常のブラウザ表示に切り替えたとたんセッション切れそうなので試してもいません。今回のケースは書類からの手入力部分もあり、完全自動化はどうしても不可能なので。
「セキュリティ関連の仕様のため不可能です」でパシッと返したのですが、「じゃあ最後の手段でキーボード直接叩け」と古いVBのスクリプト付きで思わぬリターンが(^^;)。
お陰で本日一日SendKeysに翻弄されました。
メモです。
SendKeysで別のアプリにキーボードから値を送るのにはその前にAppActivateでウインドウをアクティブにする必要があります。C#の場合はこの機能がないので、using Microsoft.VisualBasic;する必要があります(参照追加も忘れずに)。
Interaction.AppActivate(タイトル); タイトルはHTMLタグのヘッダのtitle部分を指定します。タイトルがShift_JISの日本語でも大丈夫でした。(ちなみにIEは自分で立ち上げてもらいます。認証が必要な場合はログインしておいてもらいます。一番最初の値をペーストするテキストボックスをクリックし、カーソルを移動しておいてもらいます(^^;)。)

Clipboard.SetDataObject(値, false) ; //値をクリップボードに保存
SendKyes.SendWait("^v");  //値をペースト
SendKyes.SendWait("{TAB}"); //タブキーで次のテキストボックスに移動

を必要なだけ繰り返すわけですが、それぞれ間にSleepを入れて調整してあげる必要がありそうです。しかもSleepの間隔は個人で調整できるようにしておいた方がいいような気もします。CPU二つんだ贅沢仕様の開発用のマシンでは問題なく動いていますが、リリースしたとたん「うまくいかん!」というお問い合わせが来そうで怖い。
結構既製品のシステムも入っているので、今まで連携は無理と思っていたこともこのやり方なら幾つかクリアできそうなところもありますが、あまり流行らせたくないなあ(^^;)。

投稿者 idic : 22:24 | コメント (0)

2007年08月04日

Webインターフェースとのシステム連携 2

ブラウザなりすましは、Webシステムから返ってくるエラーを全部チェックし、完全自動化しない限り通常のブラウザ表示に切り替えたとたんセッション切れそうなので試してもいません。
2007年06月29日のエントリーで上記のように書きましたが、mshtmlを使うと自前ブラウザの作成も簡単みたいですね。少なくともSendKeyよりずっと楽で確実です。大量の貼り付けが一瞬で終わってしまいます。IEの機能を使ってプログラム自身がブラウザになるので、自動化する部分と手動で操作する部分を混ぜてもセッションが切れることはありません。ブラウザクラスを利用してプログラミングというとLWPのイメージが強くて、結果のHTMLをレンダリングして手動と混ぜ込むなんて考え付きもしませんでしたが、便利になってますね。 オークション自動落札プログラムとか、予告された受付開始時間がきたら自動的に登録してくれるチケットゲットプログラムとか案外簡単に出来そうです(^^;)。カード持たない人だからやらないけど。

投稿者 idic : 00:05 | コメント (0)

2007年08月27日

CSVをAccessにインポート

C#でMySQLとSQLサーバーに分かれて存在しているそれぞれ数万件のデータを、条件変えながら突合せる処理があまりにも時間がかかりそうなので、Accessしか入ってない自分のPCに取り込んでやろうとしてます。サーバーにAccessは入ってませんがmdbファイルさえあれば入れ物としては使えるはずで、移植も不可能ではないだろうし。
で、それぞれのDBから取ってきた情報を比較しやすいように加工してCSVに書き出し、AccessにインポートしてからSQLでぐるぐる回そうと思っていたら、突き合せようのコードが勝手に数値に変わってしまいます。空のテーブルを作っておいてコードの部分はテキストにしてあるにもかかわらず。
CSVを作る時に0埋めしてあるコードの前後をダブルコーテーションで囲むと、コードに混ざってtestとか○○用とか本来ありえない文字が入っている方は大丈夫でしたが、きれいにコードのみの方は相変わらず数字扱い。両方数値化されてれば突合せに問題なかろうといえばその通りですが、今度はtestとか○○用が空になってしまってます。調べまくったらCSVファイルと同じ場所に定義を書いたschema.iniというのを置いておく必要があったようです。
無事0付きでインポートできましたが、今度はつき合わせ途中の中間ファイルをCSVで作成していたら、CSVファイルのサイズはずっと0でプログラムの終了間際にファイルが書き込まれてます。その間ずっとメモリに保存されてるって事は、わざわざAccessに落とさなくてもDataSetのままぶん回してもあまり変わらないかも(^^;)。

投稿者 idic : 22:26 | コメント (0)

2007年11月02日

Windows Presentation Foundation

PageFlowのサンプルプロジェクトで読み込みできないプロジェクトの中身を見ていたらxamlというこれまた見慣れない拡張子のファイルがたくさん。調べると今度はWindows Presentation Foundationだと。言われてみればこれも数日前から何度か目にしているような。私の環境で動かすにはWindows SDKが足りなさそう。サンプルのデモを見てみたい気もするけれどこちらの方はそれほど気を惹かれない。余計な効果はいらないからサクサク動け!という人なので(^^;)。
本当は時間のかかる処理を待たせる間、間を持たせるための技術なんでしょうが。まず自分が楽できるための技術の方からお勉強です(^^;)。

投稿者 idic : 23:19 | コメント (0)

2007年11月17日

HashTableのソート

住所から0~9までの全角数字と全角ハイフンを除いて町名部分だけでカウントしろといわれてSQL(SQL Server)でやる方法を探したもののうまく見つからず、Perlでやるのと同じように一旦DataSetに落としてから連想配列を使ったら、出来上がったHashTableの後ろにボチっとドットをつけてもSortByKeyとかSortByVlueとか出てこない(^^;)。調べたらなんか自分で実装する必要ありそうなこと書いてあるし、まじですかぁ??ソートの出来ない連想配列に使い道などあるんでしょうか、とまで思ったり。CSVで書き出しエクセルでソートしてもらおうかとか思ったり。
その前にもう一度と思って検索かけたらFramework2.0だと簡単にできるようで、プロジェクト丸ごとコンバートしました。集計プログラムばかり大量に集めた古いプロジェクトでしたが、幾つか警告はでるものの(古い書き方だと警告だすくらいならコンバートの時に書き換えてくれればいいのにと思いますが)見た感じ問題なく動いています。

投稿者 idic : 22:29 | コメント (0)

2007年12月09日

Volta

マイクロソフト、ウェブアプリ開発キット「Volta」をリリース
バタバタしていて全然ついていけてませんが、とりあえずリンクだけ。RequirementsはVS2008と.NETフレームワーク3.5ですか…。3.0入れたばっかりなんですがね。

投稿者 idic : 16:01 | コメント (0)

2008年04月14日

ADO.NETでmySQL接続 再び

ひっさしぶりに昔作ったASPにページ追加頼まれ、とりあえずソース呼び出し実行してみたら「指定されたカルチャ (またはニュートラル カルチャ) に必要なリソースがアセンブリに見つかりません。"MySql.Data.MySqlClient.MySqlClient.Strings.resources" が、アセンブリ "MySql.Data" に正しく埋め込まれているか、またはリンクされているかを確認してください。 」
ググったらダウンロードしたバイナリそのまま使うのではなくソースからコンパイルしなおせとか、1.0.6で修正済みだから最新版入れろとかいろいろ出てくる。まず最新版(MySQL Connector Net 1.0.10.1)入れてみたら今度はメッセージがReading from the stream has failedに変わる。こちらはググると5系の話題がたくさん出てくる。1.0.5のソースが残っていたのでこちらをコンパイルし直してみるも相変わらず「Reading from the stream has failed」。
ここで切れてmySQLを4.1に落としたらすんなり動いてくれました。
冷静に考えると4.1で作成したDBをドラッグ&ドロップで5系のMySQLのdataフォルダにコピーしたのが間違いの元だったのかも(^^;)。クライアントmysqlのコマンドラインではちゃんとuseもselectもできたものでまさかこんなところではまるとは思いませんでした。

投稿者 idic : 22:07 | コメント (0)

2008年06月15日

文字列の配列

スケジュールで開始時間を選択したら、入力画面が開いて終了時間のドロップダウンにはそれ以降、22時までの時間を15分刻みでセットし、コンフィグで設定されたタイムスパン後をデフォルトでSELECTEDしとく、いう仕様を満たそうと、開始時間から22時までの間whileで15分ずつ加算しながら、15分刻みで配列作ってドロップダウンにバインドしてもなぜか何も起こらない。
よく調べたらnewしてMAXをセットしておかないと駄目らしい。Perlなら楽なのに、と思ったらMAXの指定がいらないStringCollectionというのが見つかりました。Perlの配列がArrayじゃなくてListなのと同じ感じでしょうか。重宝しそうです。

投稿者 idic : 21:51 | コメント (0)

2008年08月15日

SP1

お盆休みって何? と言う事で明日も仕事です…。
VS2005とフレームワーク3.5のSP1が出たようなので忘れないようにリンクだけ。
VS2008の方は帰り間際にインストール始めるとやばいそうです(^^;)。人柱になった向かいのT君によれば1時間半は見とけ、とのことです。
私は職場は未だ2005なので当分見送りです。自宅はWeb Developerなので丸ごと入れ替えが必要なようです。

投稿者 idic : 23:14 | コメント (0)

2008年08月16日

.NET でFTP

まず無料で使えるものを探すことから(^^;)。
こういう時はCPANのあるPerlは最高だなと(^^;)。しょうがないからググって上の方から覗きまわって、自由に使えて、ドキュメントがしっかりしていて、動くサンプルもついててという条件を満たすものを探し出す、という根気のいる仕事をするわけですが(それでも自分で書くより早いというか信頼できる)、思ったよりも早く手ごろなものが見つかりました。TKFP使わせていただくことになりました。
躓いた箇所は

CMSもどきの作成で、ページ単位の更新なので該当ページ1ページのみFTPのつもりで書き始めたので、ファイル転送部分をオープンからクローズまで一連の流れにしてしまい、あとでWhat's New用のファイルやRSS用、モバイル用を追加した際、面倒なのでそのまま同じルーティンを使った(ファイル1枚送るたびにオープン、クローズをする)。機械のやることだし、文句は言われないだろうと思ってたら「Active接続用のポート準備に失敗しました」のエラーがでたこと(^^;)。ここ見てやはりオープンとクローズはそれぞれ別個にわけ、一度の接続で複数のファイルを転送するように変更しました。

変更後は上記のエラーが出ることはなくなりましたが、今度は「TKFP.Net.ResposeTimeOutException: サーバーからのレスポンスがありませんでした。通信はタイムアウトしました。」というエラーが出たり出なかったり。しかもサーバー側に空ファイルを作成してから(既存のファイルを空にしてから)死ぬのでWhat'sNewファイルが読めないトップページで悲惨なエラーが出ることに(^^;)。ログをとってみるとサーバーにTYPE Iを送った後レスポンス待ちでタイムアウトが発生しているようで、まさにエラーメッセージ通り。何度かテストしているうちに、時間を置いて試した1度目は必ず成功し、その直後にもう一度接続すると必ず失敗することに気づく。で、付属のサンプルで接続、アップロード、切断、接続、アップロードを繰り返してみてもちゃんと動くし。お金出して有料のライブラリ集買ってもらおうかと傾きかけていたのが急にしゃっきりしてログを見比べたらなんかPASSIVになってるみたい。真似してConnectionModesをPassiveにしたらサクサク転送してくれました。感動です。

投稿者 idic : 23:00 | コメント (0)

2008年08月18日

Visual Web Developer 2008インストール中…

明日(もう今日か)休みでよかった。まだまだ終わりそうにない(^^;)。アンインストールしてインストールならコピーするだけでそれほど時間はかからないだろうとふんでたんですが。まだフレームワーク3.5のSP1のインストールの途中です。3.5は入れてなかったつもりなんですが、最初から入ってたのか知らん。フレームワークだけ新たに入れるならこんなに時間かかるはずないし。少なくとも今まで入れた経験からすると。

投稿者 idic : 00:48 | コメント (0)

2008年09月04日

CGIにCSVを送りつける

送り先のCGIの方も社内で自作されたものなので、作者にプログラム同士の連携しやすい形に変更してもらおうとも思ったのですが、大量のデータを送りつける場合は、ファイルアップロードの方がPOSTサイズの制限に引っかからないようなので、そのままmultipart/form-dataでCSVを送りつけることにしました。
ここのHttpWebRequestとHttpWebResponseを使った方法のサンプルをそのままコピッて、明らかに変更必要と思われるところだけ変更してとりあえず実行(^^;)。相手がよければそのまま動いたはずのものが、思わぬ深みに。2008年6月26日のコメントにもありますが、相手がPerlの場合は最後の「--」を待っていることが多いようで、cgi-lib.plを使っている場合は、「reached end of input while seeking boundary of multipart. Format of CGI input is wrong.」、CGI.pmを使っている場合は「400 Bad request (malformed multipart POST)」というようなエラーとなります。リンクされているmultipart/form-dataの仕様をざっと読んだ限りでは特に最後の「--」には触れられていないようなので、ブラウザで実装されている仕様にあわせてCGIのモジュールが書かれてしまっているっぽい? まあここは素直に相手方に合わせて最後のboundaryの後におまじない「--」をつけときませう。
もう一つの変更箇所は、DBから読んだデータをそのまま送りつけるので、ファイルアップロードするためにわざわざローカルにテキストファイルを書き込んだりせず、直接ストリングビルダーにCSVを作成して、他のパラメータと一緒にPostデータにして、ストリングに変換してからバイト配列に変換して、reqStreamに書き込み、に変更。
異なるシステム間のデータ連携のオプションが一つ増えた感じです。まもなくデヂエが導入されることに決まったようなので、今後はデヂエから自動でCSV取って来てというような要望が増えそうですが…。

投稿者 idic : 21:21 | コメント (0)

2008年09月06日

マニュアルは必要なやつが作れ

決して自分が作ったソフトのマニュアルを使う担当者に作らせようとか、そんなことは考えていません。念のため(^^;)。
仕様書もなければマニュアルも無い、そんなソフトが社内にあふれていて、自分が作ったのでなくても色々聞かれるわけですが、なんか最近同じようなことばかりしていると感じる時があり、これではいかんんと思ったわけです。今まで聞かれて尋ねまわったり、探し回ったりして解決したことを、メモったりメールで関係者に流したりしていたことを、ぜんぶWebにまとめれば少しは少しは楽になるんじゃないかと。
で、フォームにぼとんと落とせば、マニュアル専用に立てたWikiにフォームのタイトル付きでリンクしてくれるという優れもの(自分で言うか)を作成しました。
もともとWindowsアプリはほとんど作ったことがなく、初めてのユーザーコントロールです。(最初で最後の可能性も)

//親フォームのタイトル取ってきて
string keyword = ParentForm.Text;

//有効なWikiNameではありません、と言われそうな文字列削って
keyword = Regex.Replace(keyword, @"[$?/:&=%<>+\[\]]", "");

//URLエンコードして
keyword = Uri.EscapeDataString(keyword);

//Wikiへ飛ばす(このまま使っちゃ駄目よ。使えてしまうけど)
System.Diagnostics.Process.Start("http://pukiwiki.sourceforge.jp/?" + keyword);

せっかくなので、背景の画像も作ってみました。
onlinehelp.gif
たぶん今まで画像付きのボタンなど無かったはずなので、この目立つボタンを見つけクリックし、空のWikiページが立ち上がった時の担当者の怒りや如何に(^^;)?
反応怖い場合はボタン付きをリリースする前に最低限のページを保存しときましょうね。

投稿者 idic : 21:19 | コメント (0)

2009年11月08日

VS2010インストール失敗中

久しぶりにWindows Workflowのことを調べはじめたらWF4の話題にぶちあたり。今までのWFの下位互換は保たれるようですが、かなりの大幅な変更があるとのこと。メインストリームになれなかったことを反省して色々改良を加えたとか。
再び興味がわいてきてVS2010を落とそうとしたら、深夜を過ぎて途中でほとんどサーバーの応答が無くなり眠くなって途中で切ってしまいました。本日beta2が落とせることに気づき、改めてこちらに挑戦しましたが、これもあまりの遅さにファイルを1つダウンロードしたところであきらめました。ひょっとするとbeta2が公開されたばかりで込み合ってるんでしょうか。

投稿者 idic : 22:02 | コメント (0)

2011年10月06日

Webインターフェースとのシステム連携 3

Webインターフェースとのシステム連携
Webインターフェースとのシステム連携 2
随分と昔にやったきりのWebインターフェイスとの連動ですが、最近また新たな案件が発生し、調べなおしたら、原始的だけどLWPと同じような感覚で使えるサンプル見つけました。ASP.NETから使う場合はこちらの方がなじみがあって使いやすそう。
ということで、試しにこのブログに書き込みテストしてみました。再構築をやって公開までにはいたりませんでしたが、自動ログインし、エントリーの追加はできました。追加に成功したかどうかは「if (responseData.Contains("再構築中"))」で引っ掛けてASP側の最終表示はこんな感じ。これはこれで使えそうな感じです。

投稿者 idic : 22:20 | コメント (0)