SQL 使用 SqlDataReader 学习 C#

SQL get to C# with SqlDataReader

我有问题。我想从我的 SQL 服务器数据库中获取数据。当代码为 运行 时,第一行未添加到我的数组列表中。所有其他行都已成功添加。在 SQL 服务器中,查询工作正常,但在 VS 中,它不起作用。

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection baglanti = new SqlConnection("server=.; Initial Catalog=TripData;Integrated Security=SSPI");
    baglanti.Open();

    SqlCommand komut = new SqlCommand();
    komut.CommandText = "select top 50 trip_ID from Sayfa1$";
    komut.Connection = baglanti;

    komut.ExecuteNonQuery();

    SqlDataReader oku = komut.ExecuteReader();

    while (oku.Read())
    {
        foreach (var item in oku)
        {
            gecici.Add(oku["trip_ID"].ToString());
        }
    }
}

您正在尝试以两种不同的方式迭代 reader - 使用 foreach 循环 使用 while (reader.Read())。你应该做一个或另一个 - 我个人看到使用 while (reader.Read()) 的代码比 foreach 方法更多。

此外,我建议在代码中对一次性对象使用 using 语句,而不是先调用 ExecuteNonQuery。 (目前尚不清楚您为什么要这样做)。所以你可以写:

// Note that this looks like a mixture of UI and non-UI code; consider separating
// them for greater code reuse, separation of concerns etc.
private void button1_Click(object sender, EventArgs e)
{
    // Declare connectionString elsewhere, or have a common method to open the connection.
    // You're likely to need that in multiple places.
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();
        using (var command = new SqlCommand("select top 50 trip_ID from Sayfa1$", connection))
        {
            using (var reader = command.ExecuteReader())
            {    
                while (reader.Read())
                {
                    gecici.Add(oku["trip_ID"].ToString());
                }
            }
        }
    }
}

(此外,如果您 真的 按照您的 post 建议使用 ArrayList,我强烈建议您开始使用通用集合,例如本例中的 List<string>。)