更新现有数据库条目C#VS2010

时间:2014-07-23 18:12:24

标签: c# visual-studio-2010

我使用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");
        }
        }
    }

2 个答案:

答案 0 :(得分:2)

您不应该将数据库参数放在引号内 - 如果您这样做,它们将被评估为纯文本而不是参数。没有ServiceRequestNumber等于文字字符串' @ servreq'的行,所以没有更新。

此外,DataCommands不会将局部变量作为参数引入 - 它们必须显式添加到DataCommand对象(在本例中为cmd)。删除参数添加代码后,您没有收到任何错误的原因是,如上所述,查询并不期望任何参数。

此外,在您删除的代码中添加参数的方式至少可以说是奇怪的。这更为正常,而且更容易阅读:

cmd.Paramaters.AddWithValue("@paramName", paramData);
//or
cmd.Parameters.Add(new OleDbParameter("@paramName", paramData));

答案 1 :(得分:0)

在花了一点时间编辑和移动代码后,我偶然发现你的参数在查询中的顺序必须与绑定值时的顺序相同。在完成JoFlash Studios建议的语法更改并按正确顺序输入参数后,我能够对表单中的现有数据进行编辑。