※ ChatGPTを利用し、要約された質問です(原文:ASP.NET C#で)
ASP.NET C#で重複登録を確認後、StreamWriterで書き込みができないエラーが発生する
このQ&Aのポイント
ASP.NET C#でStreamReaderを使用して重複登録を確認し、StreamWriterでデータを書き込むプログラムを作成しています。しかし、重複確認も書き込みもエラーが発生し、正常に動作しません。
エラーの内容は、'閉じている TextReader から読み取ることはできません' というものです。また、他のプロセスに使われているためのエラーも表示されます。
どのようにしたらプログラムを正常に実行できるのか教えてください。
ASP.NET C#で重複登録されないようにStreamReaderで読み込んで確認後重複がなければ
StreamWriterで書き込むというプログラムを書いていたのですが、重複確認もcsvファイルへの書き込むもエラーが表示されて出来ませんでした。
sr.Close();の位置を変えても変わりませんでした。
エラー内容
・System.ObjectDisposedException はユーザー コードによってハンドルされませんでした。
Message=閉じている TextReader から読み取ることはできません。
他にも、他のプロセスに使われているため・・・と言ったエラーも表示されます。
ソースコード
protected void Button1_Click(object sender, EventArgs e)
{
string Searchid = TextBox1.Text;//商品コード
//ファイルの存在を確認
if (!File.Exists(MapPath(".") + "\\Data\\product.csv"))
{
Label2.Text = "データ登録先が存在しません。管理者に連絡してください。";
return;
}
this.Label1.Text = string.Empty;
//確認ここまで
StreamReader sr = new StreamReader(MapPath(".") + "\\Data\\product.csv", true);
while (sr.Peek() != -1)
{
string date = sr.ReadLine();
char[] delimiter = new char[] { ',' };
string[] item = date.Split(delimiter);
string id = item[0];
sr.Close();
if (Searchid.Equals(id))
{
Label1.Text = "既に存在する商品コードです。別の商品コードを指定してください。";
}
else
{
Session["scode"] = TextBox1.Text;//商品コード
Session["sname"] = TextBox2.Text;//商品名
Session["price"] = TextBox3.Text;//価格
StreamWriter sw = new StreamWriter(MapPath(".") + "\\Data\\product.csv", true, Encoding.GetEncoding("Shift_jis"));
sw.WriteLine(TextBox1.Text + "," + TextBox2.Text + "," + TextBox3.Text);//商品コード+商品名+単価
sw.Close();
Label1.Text = "正常に登録出来ました。";
}
}
}
どのようにしたら実行出来るのでしょうか?
教えて下されば幸いです。
お礼
FileStreamを使って最初からやってみようかと思います。
補足
データベースを使えば簡単だということは分かっています。 ただ、データベースを使わないで、という条件なので困っているのです