【问题标题】:How to solve error `You have specified an invalid column ordinal`如何解决错误“您指定了无效的列序号”
【发布时间】:2013-05-27 10:02:51
【问题描述】:

我收到以下错误:

您指定的列序号无效

我已经检查了我的数据库中的列号,我知道它是正确的。这是我的代码:

using (MySqlCommand cmd = new MySqlCommand(query, con))
{

    cmd.Parameters.AddWithValue("@ID", txtboxID.Text);
    MySqlDataReader dr = cmd.ExecuteReader();

    while(dr.Read())
    {
        int size = dr.GetInt32(3);
        int quantity = dr.GetInt32(4);
        string variant = dr.GetString(2);

        DataGridViewRow row = dataGridView2.Rows
           .Cast<DataGridViewRow>()
           .Where(r => (r.Cells["variant_name"].Value.ToString().Equals(variant) && r.Cells["size"].Value.Equals(size)))
           .First();

        row.Cells["quantity"].Value = quantity;
    }
}

我在这一行遇到错误 -> int size = dr.GetInt32(3);

【问题讨论】:

  • 你从哪一行得到这个?
  • 你能展示dr被实例化的代码吗?基于错误听起来可能没有任何行,或者您没有在其上调用dr.Read
  • @蒂姆。我已经更新了我已经包含了 dr 被实例化的代码。
  • @Tim 这是查询string query = "SELECT variant_name, size, quantity FROM tblOrder_Products WHERE order_ID=@ID";
  • 您的序数已关闭 - 变量应为 0,大小应为 1,数量应为 2。序数基于 0。

标签: c# database datagridview datagridviewrow


【解决方案1】:

您的查询返回三列,并且列序号基于 0,因此您的序号将是 0、1 和 2,如下所示:

int size = dr.GetInt32(1);
int quantity = dr.GetInt32(2);
string variant = dr.GetString(0);

当您的查询按顺序(0、1 和 2)返回 variant_namesizequantity

【讨论】:

  • 好的,我现在知道了。因为,起初我有点困惑,如果该序数基于我数据库中的列号。再次感谢您。
  • @Harvey - 没问题,很乐意提供帮助。编码愉快!
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
相关资源
最近更新 更多