我一生无法获得此更新查询。
消息框弹出并说它已经更新,但是当我看时,它没有!这是这三个字段中数据外观的示例:
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();
}
}
首先,我始终避免将AddWithValue
用作我不会深入的内容。
到目前为止,我发现代码有两个明显的问题。
由于large number of reasons,正在推断每个参数的OleDbParameter
类型。改为使用AddWithValue
,并确保指定与数据库类型匹配的正确类型。
在查询字符串中的参数(例如Add
)周围使用单引号。最好不要这样做('@Syslink'
自动处理),最坏的情况是中断,因为它主要用于字符串比较。
进行这些更改会带来额外的好处,即OleDbParameter
字段可以转换为正确的类型。
关于您当前的行为,查询正在运行(否则将引发异常),但是Text
过滤器无法匹配您期望的行。
进行上述更改,然后重试。