首页 > 解决方案 > 返回多行

问题描述

请检查以下代码:

public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            conn.Open();
            using (SqlCommand cmd = conn.CreateCommand())
            {

                cmd.CommandText = sql;
                cmd.Parameters.AddRange(parameters);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                DataSet dataset = new DataSet();
                adapter.Fill(dataset);
                return dataset.Tables[0];
            }

        }
    }

此函数仅返回一行。如果我的数据库中有很多行并且需要将其添加到组合框中,我应该如何修改我的代码?

string sql = "select country from CarCountry";
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Connection = conn;
                    SqlDataReader DR = cmd.ExecuteReader();
                    while (DR.Read())
                    {
                        combobox1.Items.Add(DR[0]);
                    }
                }
            }

我使用上面的代码在组合框中添加项目。我想写一个函数来替换它...

标签: c#sql-server

解决方案


您的代码返回一个DataTable,而不是DataRow。这很好,但如果你想获取 的行DataTable它是.DataTable

下面使用您的方法获取一个DataTable,循环通过它DataRows并将一个项目添加到您的comboBox1. 此项是Username从数据库中获取的每一行的值。(当然你SQL的不同,但这只是一个例子。)

public static void Main(string [] args)
{
    PopulateComboBox(); // Will kick off everything.
}

public static void PopulateComboBox()
{
    DataTable table = ExecuteDataTable("SELECT Username FROM Users WHERE firstname = @firstname", new SqlParameter("Bob", SqlDbType.VarChar);

    foreach(DataRow row in table.Rows)
    {
        comboBox1.Items.Add(row["Username"].ToString());
    }
}

public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = sql;
            cmd.Parameters.AddRange(parameters);
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            return dataset.Tables[0];
        }
    }
}

推荐阅读