我使用Visual Studio 2010在c#中创建Win表单。它有一些Comboboxes和文本框,用户可以填写然后提交到Access DB。当我尝试更新现有条目时,我的问题出现了。我加载现有条目,进行更改并单击更新。我没有遇到任何系统错误,我与DB的连接成功,但实际上没有对数据进行任何更改。我完全错过了什么吗?提前感谢任何帮助或见解。
以下是更新按钮的代码:
private void updateButton_Click_1(object sender, EventArgs e)
{
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\servicereq1.mdb";
OleDbCommand cmd = new OleDbCommand("UPDATE servicereq SET DateLogged = @datelogged, LoggedBy = @loggedby, Function = @function, [Other Impacts] = @summary, Account = @earningsaccount, [From] = @from, [To] = @to, Description = @description, Fixer = @fixer, [Time Estimate] = @timeestimate, [Actual Start] = @actualstart, [Actual Finish] = @actualfinish, [Actual Time] = @actualtime, [Programs/Forms] = @programsforms, Comments = @comments, [Retest Date] = @requestdate, Tester = @tester, Status = @status, [Problem In Environment] = @problemfoundin, [Code In Environment] = @codein WHERE (ServiceRequestNumber = @servreq)");
cmd.Connection = conn;
conn.Open();
if (conn.State == ConnectionState.Open)
{
cmd.Parameters.AddWithValue("@servreq", serviceRequestNumberTextBox.Text);
cmd.Parameters.AddWithValue("@datelogged", dateLoggedTextBox.Text);
cmd.Parameters.AddWithValue("@loggedby", loggedByComboBox.Text);
cmd.Parameters.AddWithValue("@problemfoundin", problem_In_EnvironmentComboBox.Text);
cmd.Parameters.AddWithValue("@function", functionTextBox.Text);
cmd.Parameters.AddWithValue("@summary", other_ImpactsTextBox.Text);
cmd.Parameters.AddWithValue("@earningsaccount", accountTextBox.Text);
cmd.Parameters.AddWithValue("@from", fromTextBox.Text);
cmd.Parameters.AddWithValue("@to", toTextBox.Text);
cmd.Parameters.AddWithValue("@status", statusComboBox.Text);
cmd.Parameters.AddWithValue("@description", descriptionTextBox.Text);
cmd.Parameters.AddWithValue("@fixer", fixerComboBox.Text);
cmd.Parameters.AddWithValue("@codein", code_In_EnvironmentComboBox.Text);
cmd.Parameters.AddWithValue("@programsforms", programs_FormsTextBox.Text);
cmd.Parameters.AddWithValue("@timeestimate", time_EstimateTextBox.Text);
cmd.Parameters.AddWithValue("@actualstart", actual_StartTextBox.Text);
cmd.Parameters.AddWithValue("@actualfinish", actual_FinishTextBox.Text);
cmd.Parameters.AddWithValue("@actualtime", actual_TimeTextBox.Text);
cmd.Parameters.AddWithValue("@requestdate", retest_DateTextBox.Text);
cmd.Parameters.AddWithValue("@tester", testerComboBox.Text);
cmd.Parameters.AddWithValue("@comments", commentsTextBox.Text);
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Form Updated Successfully");
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
conn.Close();
}
}
else
{
MessageBox.Show("Connection Failed");
}
}
}
答案 0 :(得分:2)
您不应该将数据库参数放在引号内 - 如果您这样做,它们将被评估为纯文本而不是参数。没有ServiceRequestNumber等于文字字符串' @ servreq'的行,所以没有更新。
此外,DataCommands不会将局部变量作为参数引入 - 它们必须显式添加到DataCommand对象(在本例中为cmd)。删除参数添加代码后,您没有收到任何错误的原因是,如上所述,查询并不期望任何参数。
此外,在您删除的代码中添加参数的方式至少可以说是奇怪的。这更为正常,而且更容易阅读:
cmd.Paramaters.AddWithValue("@paramName", paramData);
//or
cmd.Parameters.Add(new OleDbParameter("@paramName", paramData));
答案 1 :(得分:0)
在花了一点时间编辑和移动代码后,我偶然发现你的参数在查询中的顺序必须与绑定值时的顺序相同。在完成JoFlash Studios建议的语法更改并按正确顺序输入参数后,我能够对表单中的现有数据进行编辑。