C#winforms参数1:无法转换为'字符串'到' int'

时间:2016-11-03 02:45:24

标签: c# sql-server ado.net sqldatareader

我试图将数据读取器中的列读入标签(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();
        }

我收到错误"参数1:无法转换为' string'到' int' "在以下一行

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

用plant_id在RED中加下划线。

我做错了什么? 我似乎无法弄明白。 plant_id是列类型Int。 使用Sql Server 2008作为数据库。

任何提示都将不胜感激。

3 个答案:

答案 0 :(得分:2)

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();

答案 1 :(得分:0)

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

如果是这样,那么您可以尝试SqlDataReader.GetString方法来读取该值,在这种情况下,您无需添加.ToString(),ecode将是:

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

答案 2 :(得分:0)

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

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

或者

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

任何一个都有效。感谢您的快速回答:)