1

次のコードは正常に実行されますが、データベースのデータは更新されません。INSERT は問題なく動作するので、mode="edit" が true になっている部分を考慮してください。

更新するか挿入するかを示すさまざまなモードがあります。挿入はすべてのデータベース フィールドで正常に機能しますが、更新は機能しません。エラーは発生しませんが (実行は成功します)、データベースは更新されません。

double id; // please consider only edit part
if (mode != "edit")
    id = id_increment();
else
    id = Convert.ToInt64(view_gv.CurrentRow.Cells["id"].Value.ToString()); //find currrent row successfully
OleDbCommand com = new OleDbCommand();
con.ConnectionString = con_string;
con.Open();
com.Connection = con;
if (mode != "edit")
{
    com.CommandText = "INSERT INTO [TBLPERSONMST] ([ID],[name],[address],[city],[o_phone],[r_phone],[mo_number],[email],[dob],[ann_date],[bg],[sex],[group]) VALUES (@id,@name,@add,@city,@ophone,@rphone,@mophone,@email,@dob,@ann_date,@bg,@sex,@group)";

}
else
{
    com.CommandText = "UPDATE [TBLPERSONMST] SET [name]=@name,[address]=@add,[city]=@city,[o_phone]=@ophone,[r_phone]=@rphone,[mo_number]=@mophone,[email]=@email,[dob]=@dob,[ann_date]=@ann_date,[bg]=@bg,[sex]=@sex,[group]=@group WHERE [ID]=@id";

}

com.Parameters.Add(new OleDbParameter("@id", id));

com.Parameters.Add(new OleDbParameter("@name", name_txt.Text));
com.Parameters.Add(new OleDbParameter("@add", add_txt.Text));
com.Parameters.Add(new OleDbParameter("@city", city_txt.Text));
if (ophone_txt.Text != "")
    com.Parameters.Add(new OleDbParameter("@ophone", Convert.ToDouble(ophone_txt.Text)));
else
    com.Parameters.Add(new OleDbParameter("@ophone", "0"));
if (rphone_txt.Text != "")
    com.Parameters.Add(new OleDbParameter("@rphone", Convert.ToDouble(rphone_txt.Text)));
else
    com.Parameters.Add(new OleDbParameter("@rphone", "0"));
if (mo_txt.Text != "")
    com.Parameters.Add(new OleDbParameter("@mophone", Convert.ToDouble(mo_txt.Text)));
else
    com.Parameters.Add(new OleDbParameter("@mophone", "0"));
com.Parameters.Add(new OleDbParameter("@email", email_txt.Text));
com.Parameters.Add(new OleDbParameter("@dob", dob_date.Value.ToShortDateString()));
com.Parameters.Add(new OleDbParameter("@ann_date", anni_date.Value.ToShortDateString()));
com.Parameters.Add(new OleDbParameter("@bg", bg_cmbox.SelectedItem));
com.Parameters.Add(new OleDbParameter("@sex", gen_cmbox.SelectedItem));

com.Parameters.Add(new OleDbParameter("@group", grp_cmbox.SelectedItem));

int j=com.ExecuteNonQuery();
4

1 に答える 1

0

「編集」の問題は、ACE/Jet OLEDB のパラメーター化されたクエリがパラメーター名を無視するため、. INSERT コマンドと UPDATE コマンドは異なる順序でパラメーターを使用するため、INSERT を実行するか UPDATE (「編集」) を実行するかに応じて、ステートメントを異なる順序で処理する必要があります。OleDbCommandCommandTextcom.Parameters.Add

于 2013-06-16T12:03:13.093 に答える