繁体   English   中英

动态 SQL 问题 - C# Forms (Datagridview)

[英]Dynamic SQL issue - C# Forms (Datagridview)

我目前正在尝试将我的 DataGridView 更新到我的数据库。 我希望能够使用回车键更新它。 但我收到此错误:

“不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。”

这是代码的图片(以及下面的代码片段)一些代码

以下是 Datagridview 的加载方式:

        private void RampBoardLoader()
    {
        SqlConnection connection = new SqlConnection(ConnectionLoader.ConnectionString("Threshold"));
        connection.Open();
        SqlCommand selectRampBoard = new SqlCommand("Select_Ramp_Data", connection);
        selectRampBoard.CommandType = CommandType.StoredProcedure;
        selectRampBoard.Parameters.AddWithValue("@DateID", dateTimeRamp.Value.Date);
        dt = new DataTable();
        dataAdapter = new SqlDataAdapter(selectRampBoard);
        dset = new DataSet();
        dataAdapter.Fill(dset, "Ramp_Board");
        dgvRampBoard.DataSource = dset.Tables[0];
        connection.Close();

    }

这是我尝试更新数据网格视图的地方:

        private void dgvRampBoard_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            e.Handled = true;

            scb = new SqlCommandBuilder(dataAdapter);
            dgvRampBoard.EndEdit();
            this.dataAdapter.Update(dset, "Ramp_Board");

        }

    }

我一直在四处寻找,试图找到这个问题的答案。 我看到每个人的每一篇帖子都说你需要确保你的表有一个主键。 我的表确实有一个主键。 它有 2 个主键。 “航班号”和“日期 ID”。 我不确定是不是因为我有 2 个主键,如果这就是我遇到此问题的原因。

附件是我的存储过程的数据库图像。 您还可以看到列,我有 2 个主键存储过程

如何让生活变得轻松:

(注意;这只适用于 .net 框架项目;设计者在 .net 核心中存在错误,微软已将其禁用。如果您想在核心中工作,可以使用一些技巧,但它们基本上需要使用 .net 框架项目进行编辑和 a.netcore 进行运行)

  • 将数据集类型文件添加到您的项目
  • 打开它,右键单击它的表面,选择添加表适配器
  • 设置您的连接
  • 选择使用存储过程来获取数据
  • 选择你的存储过程(我假设你有一个用于更新?)
  • 适当命名 Fill/GetData 方法(FillByDateId?)
  • 保存数据集
  • Go 转新表
  • 在视图菜单上打开数据源 window,其他 windows
  • 将代表您的表格的节点拖到您的表单上。 您应该会看到网格、绑定源、数据集和导航器出现

就是这样,您现在应该可以运行该应用程序,在框中输入一些日期 ID,点击填充,更改数据,点击保存。

如果您好奇它是如何工作的,您可以在后面的正常代码和 FormXx.Designer.cs 文件中找到设计师为您编写的代码。 tableadaptermanager 将为每个需要更新的表调用tableadapter.Update(datatable)在“父,子”顺序上。 表适配器的 Update 根据行 state 的内容适当地使用 InsertCommand、UpdateCommand 和 DeleteCommand 来持久化每一行更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM