无法从C#中的列表中检索数据

时间:2014-03-22 14:37:48

标签: c# .net sql-server

我正在使用C#.Net和MSSQL服务器设计WinForms桌面应用程序。在下面的课程中,我使用sqlDataReader读取了存储过程中的数据,并将其插入List<>

稍后我想在textboxes中显示列表值。我的问题是,当我从列表中检索数据时,texbox中没有显示任何内容。

我的存储过程:

create proc spDispMaterialPrice
@materialName nvarchar(100)
as
begin 
select unitPrice,carbohydrate,protein,fat,humidity,minerals from materialPrice where 
materialName = @materialName
end 

类别:

    //display data retrived according to material combobox to user when form loads
    public List<string> displayMaterial()
    {
        List<string> materialList = new List<string>();
        string conString = ConfigurationManager.ConnectionStrings["secaloFormulaCS"].ToString();
        using (SqlConnection sqlCon = new SqlConnection(conString))
        using (SqlCommand sqlCmd = new SqlCommand("spDispMaterialPrice", sqlCon))
        {
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCon.Open();
            sqlCmd.Parameters.AddWithValue("materialName", MaterialName);                
            SqlDataReader sqlDr = sqlCmd.ExecuteReader();
            while (sqlDr.Read())
            {
                materialList[0] = sqlDr["unitPrice"].ToString();
                materialList[1] = sqlDr["carbohydrate"].ToString();
                materialList[2] = sqlDr["protein"].ToString();
                materialList[3] = sqlDr["fat"].ToString();
                materialList[4] = sqlDr["humidity"].ToString();
                materialList[5] = sqlDr["minerals"].ToString();
            }
            sqlCon.Close();
            sqlCon.Dispose();
        }
       return materialList;
    }
}

}

winform:

        private void AppForm_Load(object sender, EventArgs e)
        {
        this.materialPriceTableAdapter.Fill(this.secaloFormulaDataSet.materialPrice );
        //panel1.Hide();

        Classes.Prices prices = new Classes.Prices(comboBox1.SelectedItem.ToString());
        List<string> items = prices.displayMaterial();
        textBox3.Text = items[0];

1 个答案:

答案 0 :(得分:2)

您正在使用List,就像它是一个数组一样。如果从表中选择了一条记录,则无需通过以下更改更改大部分代码,否则它将显示与材料名称匹配的最后一条记录。

public string[] displayMaterial()
{
    var materialList = new string[6];

和你的AppForm_Load

string[] items = prices.displayMaterial();

阅读Commonly Used Collection Types

中的MSDN Development Fundamentals