1

特に更新コードに関するコードに問題があります。

private void updatebtn_Click(object sender, EventArgs e)
{
    String Fname = fnametb.Text;
    String Lname = lnametb.Text;
    String Age = agetb.Text;
    String Address = addresstb.Text;
    String Course = coursetb.Text;

    {
        connection.Open();
        OleDbCommand select = new OleDbCommand();
        select.Connection = connection;
        select.CommandText = "Select * From Accounts";
        OleDbDataReader reader = select.ExecuteReader();
        while (reader.Read())
        {
            OleDbCommand insert = new OleDbCommand("UPDATE Accounts SET Firstname=@Fname, Lastname=@Lname, Age=@Age, Address=@Address, Course=@Course WHERE Lastname='"+ reader[2].ToString()+"'", connection);

            insert.Parameters.Add("@Fname", OleDbType.VarChar).Value = Fname;
            insert.Parameters.Add("@Lname", OleDbType.VarChar).Value = Lname;
            insert.Parameters.Add("@Age", OleDbType.VarChar).Value = Age;
            insert.Parameters.Add("@Address", OleDbType.VarChar).Value = Address;
            insert.Parameters.Add("@Course", OleDbType.VarChar).Value = Course;
            insert.ExecuteNonQuery();

            fnametb.Clear();
            lnametb.Clear();
            agetb.Clear();
            addresstb.Clear();
            coursetb.Clear();
            listBox1.Items.Clear();
            searchtb.Clear();
        }
        connection.Close();
    }
}

上記は私のコードです。1 つのレコードを更新するたびに、テーブル内のすべてのレコードが影響を受けます。リーダーに問題があると思います。助けてください、ありがとう。

4

3 に答える 3

5

すべてのレコードを選択していますが、

select.CommandText = "Select * From Accounts";

次に、リーダーで結果をループします。

while (reader.Read())

次に、各レコードを更新します。

String sql = "UPDATE Accounts SET Firstname=@Fname, Lastname=@Lname, Age=@Age, Address=@Address, Course=@Course WHERE Lastname='"+ reader[2].ToString()+"'";
OleDbCommand insert = new OleDbCommand(sql, connection);

では、なぜ驚くのでしょうか。

あなたが実際に何を望んでいるのかわかりません。たぶん、最初の select に句を追加するのを忘れていて、WHEREを使いたいと思っているかもしれませんlnametb.TextWHEREただし、最初の選択は単純に冗長であり、更新コマンドに を使用できます。

String sql = "UPDATE Accounts SET Firstname=@Fname, Lastname=@Lname, Age=@Age, Address=@Address, Course=@Course WHERE Lastname=@LastName";
insert.Parameters.Add("@LastName", OleDbType.VarChar).Value = lnametb.Text;

ところで、なぜ update-command という名前を付けたのinsertですか?

于 2013-02-28T08:26:36.933 に答える