- - PR -
CSVファイルアクセスについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-10 20:27
いつも勉強させて頂いております。
WebページでログインをCSVファイルを読み取って条件に合致したら ログインOKという処理を行っています。 CSVファイルの読み取りにおいて、環境を変えたところエラーが生じました。 あるサイトで、CSVファイルのデータをSQL文で取得できると 紹介してあったので、下記のような方法でデータを取得していました。 TEST.csvには今日の日付に対応したデータが入っています。 _______________________________________________________________ System.Data.OleDb.OleDbConnection oCon = new System.Data.OleDb.OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + PathCSVFile + ";" + "Extended Properties=\"text;HDR=YES;FMT=Delimited\""); oCon.Open(); OleDbCommand sqlCmd=oCon.CreateCommand(); sqlCmd.CommandText="select * from TEST.csv" + " where date= 今日の日付; OleDbDataReader myReader; myReader=sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); while(myReader.Read()) { csvdata=myReader.GetValue(1).ToString(); } oCon.Close(); myReader.Close(); __________________________________________________________________ これが、2000サーバ+IIS5では問題なかったのですが、 複数WEBガーデンを設定した2003サーバ+IIS6で下記のようなエラーが 生じました。 「ファイル 'TEST.csv' を開くことができませんでした。 ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。Source:Microsoft JET Database Engine」 となり、上のソースでは複数ワーカープロセスの上限を越えた場合に 対応できないものと思い、下記のソースに変更しようとしましたが、 果たしてこれは複数ワーカープロセスに対応できるものかどうかを教えて 頂きたく思っております。 ______________________________________________________________________ FileStream fs =new FileStream(PathCSVFile,FileMode.Open,FileAccess.Read); StreamReader sr = new StreamReader(fs,Encoding.Default); while ((read_line=sr.ReadLine()) != null) { read_array=read_line.Split(','); if(今日の日付.Equals(read_array[0].ToString())==true) { csvdata=read_array[1].ToString(); return; } } ______________________________________________________________________ まだまだ未熟なもので申し訳ありませんが、よろしくご指導お願いします。 | ||||
|
投稿日時: 2005-11-11 01:25
IIS の再起動で解決しませんか?
もしそうであれば、IIS 側が掴んでいることになります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-11 09:32
じゃんぬねっと様ご返答ありがとうございます。
Microsoft.Jet.OLEDBでの方法は2003サーバ上でIISを再起動すれば、 また動くようになりますが、設定したWEBガーデン以上のアクセスが あると、またエラーになります。 FileStreamを使用した方法では、今のところ上記のような状態には ならないので、大丈夫かとは思うのですが、なにせ確証が持てない ものですからここに質問した次第です。 | ||||
|
投稿日時: 2005-11-11 09:47
using と try 〜 finally を使って、Close と Dispose を保証するくらいしかないですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-11 14:20
じゃんぬねっとさんご返答ありがとうございます。
すぐ近くの投稿で原因が解りました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25938&forum=7&4 に書かれてある 「[ACC2002] IIS と共に Microsoft Jet を使用する」 が原因です。 「複数の同時実行ユーザーが Microsoft Access データベースに要求を行うと、予期しない結果が生じることがあります。」 と書かれてあるので、まさにその通りだと思います。 FileStreamの方法が大丈夫かどうかの疑問は残りますが、恐らくこのような 問題は起こらないはずと思います。 | ||||
|
投稿日時: 2005-11-11 18:10
おー、普段使わないだけに存じなかったです。
勉強させて頂いてありがとうございます。(*_ _) やっぱり、MSSQL を使いなさいってことですね... (;_ _) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1