C# winforms 参数 1:无法从 'string' 转换为 'int'

C# winforms Argument 1: cannot convert from 'string' to 'int'

我正在尝试将数据 reader 中的列读入标签 (c# winform) 我的代码如下:

 SqlCommand command1 = new SqlCommand("select  plant_name,plant_id from plant order by plant_id ", connection);

        try
        {
            connection.Open();
            SqlDataReader dr = command1.ExecuteReader();

            while (dr.Read())
            {
                string plantlable = dr.GetInt32("plant_id").ToString();
                labelplantid.Text = plantlable.ToString();

                comboBoxplant.Items.Add(dr["plant_name"]);


            }

            dr.Close();
            dr.Dispose();
            connection.Close();
        }

        catch (Exception ex)
        {

            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            Application.Exit();
        }

我在下一行收到错误 "Argument 1: cannot convert from 'string' to 'int' "

string plantlable = dr.GetInt32("plant_id").ToString();

带有红色下划线的 plant_id。

我做错了什么? 我似乎无法弄清楚。 plant_id 是一个 Int 类型的列。 数据库使用 Sql Server 2008。

如有任何提示,我们将不胜感激。

通过使用此行 dr.GetInt32("plant_id"),您正在尝试从 DataReader 读取整数值。并且错误消息说您正在尝试将字符串转换为整数,这意味着 plant_id 列将是文本或 Varchar 或类似的东西(不是整数)您能否交叉检查类型? .

如果是那么你可以尝试SqlDataReader.GetString方法来读取那个值,在这种情况下你不需要添加.ToString(),代码将是:

  labelplantid.Text = dr.GetString("plant_id");

SqlDataReader.GetInt32方法接受一个整数作为参数。该整数标记您要引用的字段的索引。在您的情况下,"plant_name" 将是索引 0,"plant_id" 将是索引 1,因为这是您在 SQL 查询中指定的顺序。

您收到错误是因为您没有传递索引,而是将 GetInt32 视为字典 getter 并尝试直接访问 "plant_id"。相反,请尝试以下操作:

string plantlable = dr.GetInt32(1).ToString();

或者,您可以使用索引器(数组)表示法直接从 SqlDataReader 获取作为对象的值:

string plantlable = dr["plant_id"].ToString();

对于那些寻找答案的人..这里是:

labelplantid.Text= dr["plant_id"].ToString();

或这个

string plantlable = dr.GetInt32(1).ToString();
labelplantid.Text = plantlable.ToString();

两者都有效。感谢您的及时答复:)