C#Access DB Update Query尽管执行起来却没有执行

问题描述 投票:0回答:1

我一生无法获得此更新查询。

消息框弹出并说它已经更新,但是当我看时,它没有!这是这三个字段中数据外观的示例:

Syslink = {EF45612D-6321-4D19-97A5-C9497D60D628}
CMCID = 44061
SEC_ID = {00EADB9A-6158-4D2B-85E4-E381CCB02611}

这些列的顺序如下:SEC_ID,SYSLINK,CMCID。在Access的设计视图中,所有这三个字段都是“ Number”数据类型,尽管从我在StackOverflow上看到的是,使用AddWithValue并不重要,除非我误解了。

private void buttonMove_Click(object sender, EventArgs e)
{
    try
    {
        bredConn.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = bredConn;
        cmd.CommandText = "UPDATE Component_Section SET [SEC_SYS_COMP_ID]='@Syslink',[SEC_CMC_LINK]='@Cmcid' WHERE [SEC_ID]='@Secid'";
        cmd.Parameters.AddWithValue("@Syslink", labelDebugDestinationSYSLink.Text);
        cmd.Parameters.AddWithValue("@Cmcid", labelDebugDestinationCMC.Text);
        cmd.Parameters.AddWithValue("@Secid", labelDebugSourceSECID.Text);
        cmd.ExecuteNonQuery();
        bredConn.Close();
        MessageBox.Show("Moved", "It moved", MessageBoxButtons.OK);
    }
    catch (Exception ex)
    {

        MessageBox.Show(ex.Message, "Error: On Move", MessageBoxButtons.OK, MessageBoxIcon.Error);
        bredConn.Close();
    }
}
c# ms-access access oledbconnection
1个回答
0
投票

首先,我始终避免将AddWithValue用作我不会深入的内容。

到目前为止,我发现代码有两个明显的问题。

  1. 由于large number of reasons,正在推断每个参数的OleDbParameter类型。改为使用AddWithValue,并确保指定与数据库类型匹配的正确类型。

  2. 在查询字符串中的参数(例如Add)周围使用单引号。最好不要这样做('@Syslink'自动处理),最坏的情况是中断,因为它主要用于字符串比较。

进行这些更改会带来额外的好处,即OleDbParameter字段可以转换为正确的类型。

关于您当前的行为,查询正在运行(否则将引发异常),但是Text过滤器无法匹配您期望的行。

进行上述更改,然后重试。

© www.soinside.com 2019 - 2024. All rights reserved.