SqlDataReader 数据类型转换错误

SqlDataReader Datatype Conversion Error

我正在尝试从组合框中的数据库加载项目,但在代码中出现了这个意外错误,而且似乎没有明显的原因。请帮忙。 错误:参数 1:无法从 'string' 转换为 'int'。 在数据库中,'PortName' 的数据类型是 Varchar。

Database Table

void FillCombo()
    {
        SqlConnection conn = new SqlConnection(global::flight_management.Properties.Settings.Default.conn);
        string sql = "SELECT PortName FROM PORTS";
        SqlCommand exesql = new SqlCommand(sql, conn);
        SqlDataReader myReader;
       try
        {
            conn.Open();
            myReader = exesql.ExecuteReader();
            while(myReader.Read())
            {
                string sName = myReader.GetString("PortName");
  // ERORR HERE: Argument 1: Cannot convert from 'string' to 'int'
                ComboFromA.Items.Add("sName");
            }
        }

        catch (Exception ex) {lblError.Text = "Error Loading Airports: "+ ex.Message;}
        finally {conn.Close();}
    }

Argument 1: Cannot convert from 'string' to 'int'

从 SqlDataReader 读取数据时数据库类型很重要

ColumnType 是字符串 GetString

ColumnType 是 int GetInt32

ColumnType 是 Double GetDouble

你可以用一个作为例子 我认为这是 SqlDataReader

的最佳实践读取值
myReader.GetString(myReader.GetOrdinal("PortName"));

并替换

ComboFromA.Items.Add("sName") to ComboFromA.Items.Add(sName);

试试下面的代码

void FillCombo()
    {
        SqlConnection conn = new SqlConnection(global::flight_management.Properties.Settings.Default.conn);
        string sql = "SELECT PortName FROM PORTS";
        SqlCommand exesql = new SqlCommand(sql, conn);
        SqlDataReader myReader;
       try
        {
            conn.Open();
            myReader = exesql.ExecuteReader();
            while(myReader.Read())
            {
                string sName = myReader.GetString(0);
  //ust use the index 0 for first attribute in select list 
                ComboFromA.Items.Add("sName");
            }
        }

        catch (Exception ex) {lblError.Text = "Error Loading Airports: "+ ex.Message;}
        finally {conn.Close();}
    }