c# - C# Access DB 更新查询没有执行,尽管它的行为就像它一样
问题描述
我一辈子都无法让这个更新查询正常工作。
消息框弹出并说它已更新,但当我查看时,它没有!这是这三个字段中数据的示例:
Syslink = {EF45612D-6321-4D19-97A5-C9497D60D628}
CMCID = 44061
SEC_ID = {00EADB9A-6158-4D2B-85E4-E381CCB02611}
这些列的顺序如下:SEC_ID、SYSLINK、CMCID。在访问的设计视图中,所有这三个字段都是“数字”数据类型,尽管从我在 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
首先,出于许多我不会深入研究的原因,我总是避免使用。
到目前为止,我发现代码存在两个明显的问题。
推断每个参数的
OleDbParameter
类型是因为AddWithValue
. 改为使用Add
并确保指定与数据库类型匹配的正确类型。在查询字符串中的参数周围使用单引号,例如
'@Syslink'
. 这充其量是不必要的(OleDbParameter
自动处理)并且在最坏的情况下会中断,因为它主要用于字符串比较。
进行这些更改会带来额外的好处,即您的Text
字段可以转换为正确的类型。
关于您当前的行为,查询正在运行(否则会引发异常),但WHERE
过滤器无法匹配您期望的行。
进行上述更改,然后重试。
推荐阅读
- javascript - 将数据从 PHP 传输到 Vue
- android - 将项目上传到新版本后Unity android构建错误
- c# - 如何将对象传递给 WPF 中的按钮单击事件处理程序?C#
- mysql - Mysql中TOP N的总和
- java - Java 使用持久存储实现锁定机制
- excel - IPicture 属性显示错误 Excel vba
- python-3.x - 从 python 3.7 调用撒克逊人
- java - 覆盖 @QueryParam 注释以修剪空格
- azure - 使用 UseConnectedAccount 上下文跨两个存储帐户启动 AzStorageBlobCopy
- ios - 如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages