Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码执行时没有错误,但无法使用C更新访问数据_C#_Ms Access - Fatal编程技术网

C# 代码执行时没有错误,但无法使用C更新访问数据

C# 代码执行时没有错误,但无法使用C更新访问数据,c#,ms-access,C#,Ms Access,我有以下代码,它成功地执行了,但没有更新数据库中的数据。请考虑模式=编辑的部分,因为INSERT工作良好。 我有不同的模式来指示是更新还是插入。Insert可以很好地处理所有数据库字段,但更新不起作用:它不会给出任何错误。执行成功后,数据库不会更新 double id; // please consider only edit part if (mode != "edit") id = id_increment(); else id = Convert.ToInt64(view_

我有以下代码,它成功地执行了,但没有更新数据库中的数据。请考虑模式=编辑的部分,因为INSERT工作良好。

我有不同的模式来指示是更新还是插入。Insert可以很好地处理所有数据库字段,但更新不起作用:它不会给出任何错误。执行成功后,数据库不会更新

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();

编辑问题源于ACE/Jet OLEDB中的参数化查询忽略参数名称,因此必须按照参数在CommandText中的显示顺序将参数添加到OleDbCommand对象。您的INSERT和UPDATE命令以不同的顺序使用参数,因此您必须按照不同的顺序处理com.parameters.Add语句,这取决于您是执行INSERT还是执行UPDATE编辑。

谢谢,先生。我在发帖后得到了答案。您是对的OELDB忽略参数名称它只按顺序获取参数。。