向数组添加数据库列

时间:2015-11-12 04:15:40

标签: c# arrays visual-studio-2015

我试图从数据库中检索字符串并将其记录到visual studio中的列表框中这是我当前的代码但由于某种原因它返回列名而不是shoud我使用dr.getvalues()或者其他东西是的如何使用它?...

 cn.Open();
 cmd.CommandText = "SELECT Code, Name, Price, Quantity FROM dbo.[Table]";
 SqlDataReader dr = cmd.ExecuteReader();

 var colna = new List<string>();
 var colpr = new List<string>();

 for (int i = 0; i < dr.FieldCount; i++)
 {
      dr.Read();
      colna.Add(dr.GetName());
      colpr.Add(dr.GetName(i));
 }

 string[] sna = colna.ToArray();
 string[] spr = colpr.ToArray();

 listBox2.Items.AddRange(sna);
 listBox3.Items.AddRange(spr);


 dr.Close();
 cn.Close();

新问题它只读取了4行我尝试将tableDataGridView.RowCount转换为变量没有运气我尝试用tableDataGridView.RowCount替换dr.fieldcount仍然没有,如果我尝试以上任何一个我得到错误无效尝试读取时没有数据

如果它起任何作用,这就是我填满数据库的方式

try
{
    cn.Open();
    cmd.CommandText = "INSERT INTO [Table](Code, Name, Price, Quantity)VALUES('" + codeTextBox.Text + "','" + nameTextBox.Text + "','" + priceTextBox.Text + "','" + quantityTextBox.Text + "')";
    cmd.ExecuteNonQuery();
    cn.Close();
    string col1 = codeTextBox.Text;
    string col2 = nameTextBox.Text;
    string col3 = priceTextBox.Text;
    string col4 = quantityTextBox.Text;
    string[] row = { col1, col2, col3, col4 };
    tableDataGridView.Rows.Add(row);
}
catch (Exception bs)
{

}

这是另一种形式

2 个答案:

答案 0 :(得分:0)

我相信你应该能够通过改变

来获得该领域的价值
olpr.Add(dr.GetName(i));

olpr.Add(dr[i].ToString());



 cn.Open();
 cmd.CommandText = "SELECT Code, Name, Price, Quantity FROM dbo.[Table]";
 SqlDataReader dr = cmd.ExecuteReader();

 var colna = new List<string>();
 var colpr = new List<string>();

 dr.Read(); // this will only read one row
 for (int i = 0; i < dr.FieldCount; i++)
 {
      colna.Add(dr.GetName());
      colpr.Add(dr[i].ToString());
 }

 string[] sna = colna.ToArray();
 string[] spr = colpr.ToArray();

 listBox2.Items.AddRange(sna);
 listBox3.Items.AddRange(spr);

答案 1 :(得分:0)

因为SqlDataReader的返回类型是一个对象。因此,您必须将值转换为所需类型。可以在C#中以多种不同的方式进行转换,如下所示:

SqlDataReader dr= command.ExecuteReader();

        while (dr.HasRows)
        {

            while (dr.Read())
            {
                colna.Add(dr.GetString(1)) // name as string
                colpr.Add(dr.GetInt32(2)) // price is integer
                colpr.Add(Convert.ToDecimal(dr(2)))// if decimal
                colpr.Add((float)(dr(2))// if Float
                OR
                colna.Add(dr["Name"].ToString()); 
                colpr.Add((float)dr["Price"]);
                .... 
            }
            reader.NextResult();
        }