向数组中添加数据库列

本文关键字:数据库 添加 数组 | 更新日期: 2023-09-27 18:21:45

我正试图从数据库中检索字符串,并将其记录到visualstudio中的列表框中。这是我当前的代码,但由于某种原因,它返回了列名,而不是应该使用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替换dr.fieldcount。如果我尝试了上面的任何一个,RowCount仍然没有。我得到错误当没有数据时无效的读取尝试

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

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)
{
}

这是一个不同形式的

向数组中添加数据库列

我相信您应该能够通过更改来获得字段的值

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

由于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();
        }