ここで私のコードはC#で、 "行/列のデータが存在しません"と言っていますが、正しく動作させるためにこのコードを改善するにはどうすればよいですか?
db = new OleDbConnection();
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + fileName;
db.Open();
string sql = "SELECT * FROM GroupNameNS WHERE GroupName = '" + Groupnametxt.Text.Trim() + "'";
cmd = new OleDbCommand(sql, db);
rdr = cmd.ExecuteReader();
if (Groupnametxt.Text.Trim() == (string)rdr["GroupName"])
{
MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
membernumber1.ReadOnly = true;
}
else
{
sql = "INSERT INTO GroupNameNS VALUES ('" + Groupnametxt.Text.Trim() + "')";
membernumber1.ReadOnly = false;
cmd = new OleDbCommand(sql, db);
rdr = cmd.ExecuteReader();
}
結果セットの行をインクリメントするには、Readerオブジェクトの.Read()を呼び出す必要があります。
rdr.Read();
//読み取るレコードがもうない場合はfalseを返すので、通常は if
ステートメントまたは while while
ループ内で使用されます
if(rdr.Read())
に if(Groupnametxt.Text.Trim()==(文字列)rdr ["GroupName"])
テーブルに GroupName
という値を持つレコードが少なくとも1つありますが、それはtrueを返します。
if (rdr.Read())
{
MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
membernumber1.ReadOnly = true;
rdr.Close();
}
else
{
rdr.Close();
sql = "INSERT INTO GroupNameNS VALUES ('" + Groupnametxt.Text.Trim() + "')";
membernumber1.ReadOnly = false;
cmd = new OleDbCommand(sql, db);
cmd.ExecuteNonQuery();
}
I modified a couple other things too: don't forget to close your Reader object after using it. And use ExecuteNonQuery()
for an INSERT
ここでは、usingキーワードで適切なクリーンアップを行い、ベストプラクティスとしてgroupnameにParameterを追加するためのいくつかの追加の変更があります。
using(OleDbConnection db = new OleDbConnection())
{
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + fileName;
db.Open();
string groupName = groupName.Text.Trim();
string sql = "SELECT * FROM GroupNameNS WHERE GroupName = '@groupname'";
using(OleDbCommand cmd = new OleDbCommand(sql, db))
{
cmd.Parameters.AddWithValue("@groupname", groupName);
using(OleDbDataReader rdr = cmd.ExecuteReader())
{
if (rdr.Read())
{
MessageBox.Show("Group Name taken, please try another name", "Error in Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
membernumber1.ReadOnly = true;
}
else
{
sql = "INSERT INTO GroupNameNS VALUES ('@groupname')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
membernumber1.ReadOnly = false;
}
}
}
}