【问题标题】:Why doesn't my stored procedure return anything on this windows form? [closed]为什么我的存储过程在此 Windows 窗体上没有返回任何内容? [关闭]
【发布时间】:2021-09-29 22:48:12
【问题描述】:

我试图在存储过程运行时填充我的DataGridView,但它似乎没有更新它应该如何更新。我正在创建一个 Windows 窗体,它有一个网格,下面有一个按钮来更新或删除记录。编辑的名称在遇到断点时被存储,但在弹出窗口关闭时不显示在网格视图中。

DataTable t = new DataTable
{
    Locale = CultureInfo.InvariantCulture
};

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlCommand command = new SqlCommand("[dbo].[AAEmailAddressPersonUpdate]",connection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@FirstName", _firstName);
    command.Parameters.AddWithValue("@LastName", _lastName);
    command.Parameters.AddWithValue("@EmailAddress", _emailAddress);
    command.Parameters.AddWithValue("@BusinessEntityID", _businessEntityID);
    SqlDataReader reader = command.ExecuteReader();
    t.Load(reader);
    connection.Close();
}

【问题讨论】:

  • 是 SELECT 还是 UPDATE?您的代码告诉我们它正在尝试两者兼而有之?
  • 网格是否使用 DataTable 作为数据源?该代码未发布。
  • 这将是更新。我不确定如何将 dgvData.DataSource = t 从表单传递到弹出窗口
  • 程序代码是什么?

标签: c# sql winforms


【解决方案1】:

代码尝试加载一个 DataTable,考虑到过程名称中的动词是“更新”,这已经很有趣了。而且,DataTable 只是一个内存结构。您需要将其绑定到窗体上的 DataGridView 控件,然后才能看到任何内容。

此外,尚不清楚command.ExecuteNonQuery(); 在这里的用途。很抱歉,这种疏忽让我们怀疑您真的不知道自己在做什么,可能需要退后几步。

【讨论】:

    【解决方案2】:

    command.ExecuteReader(); 将返回UPDATE 存储过程中的任何选择语句。

    因此,如果您在更新后返回任何选择语句 - 您将拥有阅读器。

    如果存储过程没有返回任何东西 -> 使用ExecuteNonQuery()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-19
      • 2021-04-14
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多