【问题标题】:Dot/point in datagridview when updating data [closed]更新数据时datagridview中的点/点[关闭]
【发布时间】:2021-08-27 02:09:49
【问题描述】:

所以,我有一个 datagridview (datagridview1),它连接到 SQL Server。第 3 列 (adhb) 中的 datagridview 可以通过按下按钮进行更新,只需在特定列中进行编辑。问题是当我尝试更新十进制数(例如 100.25)时,它只是更改为 10025。它如何能够更新十进制值?

数据库(tbl_tahunan),第3列(adhb)设置为十进制(18,2)

查询更新数据

query = "UPDATE tbl_tahunan SET adhb = " + datagridview1.Rows[0].Cells[2].Value + " WHERE id_coicop = 1";

cmd = new SqlCommand(query, conn);

cmd.ExecuteNonQuery();

【问题讨论】:

  • 请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。 (它甚至可以解决您当前的问题,而无需您做任何其他事情)
  • 哪里改成10025了?在网格中还是在数据库中? (您是否在网格中看到它为 100.25,但它以 10025 保存到 db,或者当您尝试在网格中输入 100.25 时它总是闪烁到 10025?)。显示该过程的一些屏幕截图以及您如何发现它是错误的

标签: c# sql-server winforms datagridview


【解决方案1】:

如果您让生活变得轻松,那么使用数据网格编辑数据库会非常容易。尝试这样做:

  • 创建一个全新的项目,这样您就不会干扰现有代码
  • 添加数据集类型的新文件
  • 双击打开
  • 右键单击表面上的任意位置,选择 Add.. TableAdapter
  • 填写db的连接详情
  • 选择“生成行的SELECT”
  • 查询SELECT * FROM tbl_tahunan
  • 完成向导
  • 切换到表单
  • 打开数据源工具面板(查看菜单、其他 Windows 子菜单)
  • 以数据集的名称展开节点
  • 将 tbl_tahunan 拖到表单上
  • 运行程序

是的,就是这样,不是你写的一行代码; VS 已经完成了这一切(并且做得更好),这个简单的应用程序将下载、显示、编辑和保存行。而且我敢打赌它也不会有任何小数问题..

您可以通过阅读 .Designer.cs 文件中的代码来了解它是如何工作的:datagridview 通过 bindingSource 连接到数据表 (tbl_tahunandatatable)。当您用数据填充表格时,您将看到网格自动显示数据。您不需要与 datagridview 单元格集合进行交互。数据的所有程序化编辑都应该对数据表进行。这是一个称为 MVC 的概念(模型 - 数据表,视图 - 数据网格视图,控制器 - 有时是处于编辑模式的数据网格视图,有时是其他) - 将 M 与 VC 分开通常有助于构建合理的程序结构

您可以在您创建的这个简单应用的基础上进行构建,例如:

  • 打开数据集,
  • 右键单击 TableAdapter,
  • 添加另一个查询,
  • 添加带有一些相关 where 子句的查询(如 SELECT * FROM tbl_tahunan WHERE adhb BETWEEN @from AND @to
  • 给它起个好名字,比如 FillByAdhbBetween
  • 在 UI 中添加一些文本框
  • 在调用它的 ui 上放置一个按钮:
tbl_tahunanTableAdapter.FillByAdhbBetween(somedatasetname.tbl_tahunan, Convert.ToDecimal(adhbfromTextbox.Text), Convert.ToDecimal(adhbtoTextbox.Text))

现在网格将只填充一些行而不是全部

我个人总是让表适配器中的第一个查询有一个 WHERE 子句,它通过主键进行选择。加载相关数据很方便。我们几乎从不想将数据库中的所有行都选择到我们的程序中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多