ASP.net C# の小さな Web ページを作成していますが、「0 の位置に行がありません」というエラーが表示され続けます。
私はおそらく間違っていますが、ここに私のコードの一部があります:
string SqlQuery = "SELECT * ";
SqlQuery += " FROM main_list";
SqlQuery += " WHERE ID = @FindID";
SqlConnection conn = new SqlConnection("server=???;database=contacts;User
ID=???;Password=???;");
conn.Open();
SqlCommand SqlCmd = new SqlCommand(SqlQuery, conn);
SqlCmd.Parameters.Add("@FindID",searchID);
SqlDataAdapter da = new SqlDataAdapter(SqlCmd);
try {
da.Fill(dt);
fillData(p);
}
catch {
txtId.Text = "ERROR";
}
FillData は次のとおりです。
protected void fillData(int pos) {
txtId.Text = dt.Rows[pos]["ID"].ToString();
txtCompany.Text = dt.Rows[pos]["Company"].ToString();
txtFirstName.Text = dt.Rows[pos]["First_Name"].ToString();
txtLastName.Text = dt.Rows[pos]["Last_Name"].ToString();
txtAddress1.Text = dt.Rows[pos]["Address1"].ToString();
txtAddress2.Text = dt.Rows[pos]["Address2"].ToString();
txtCity.Text = dt.Rows[pos]["City"].ToString();
txtState.Text = dt.Rows[pos]["State"].ToString();
txtZipCode.Text = dt.Rows[pos]["ZipCode"].ToString();
txtPhoneNum1.Text = dt.Rows[pos]["Phone_Num"].ToString();
txtPhoneNum2.Text = dt.Rows[pos]["Phone_Num2"].ToString();
txtFax.Text = dt.Rows[pos]["Fax_Num"].ToString();
txtEmail.Text = dt.Rows[pos]["Email"].ToString();
txtNotes.Text = dt.Rows[pos]["Notes"].ToString();
txtCategory.Text = dt.Rows[pos]["Category"].ToString();
txtSubCategory.Text = dt.Rows[pos]["SubCategory"].ToString();
txtDateAdded.Text = dt.Rows[pos]["DateAdded"].ToString();
txtDateModified.Text = dt.Rows[0]["DateModified"].ToString();
}
エラーが発生する呼び出しは次のとおりです。
protected void btnPrev_Click(object sender, EventArgs e) {
p--;
lblPage.Text = p.ToString();
fillData(p-1);
}
protected void btnNext_Click(object sender, EventArgs e) {
p++;
lblPage.Text = p.ToString();
fillData(p-1);
}
Rows[0] から Rows[1] まで循環しようとしていますが、位置 0 または位置 1 に行がないというエラーが表示されます。
編集:既に1行にアクセスした後、データベースから返された2番目の行にアクセスしようとしています。例: Rows[0] は問題なくアクセスできますが、Rows[1] を読み込もうとすると、エラーが発生し、位置 1 に行がないと表示されます。Rows[1] を返すようにコードを修正すると、動作します。しかし、Rows[0] にアクセスしようとすると壊れてしまいます。これが、変数 (p) を fillData に渡して、その Rows 値のみを表示できるようにする理由です。ありがとう!
EDIT 2:データベースによって取得された値を消去するポストバックがあるためだと思います。ポストバック後もデータベース エントリを保持する方法はありますか? そうでない場合は、毎回データベースにクエリを実行する必要があると思います。