要返回多行

时间:2018-04-30 18:58:50

标签: c# sql-server

请检查以下代码:

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

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

1 个答案:

答案 0 :(得分:1)

您的代码会返回一个DataTable,而不是DataRow。哪个没问题,但是如果你想获得DataTable的行,那么DataTable就是property

下面使用您的方法获取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];
        }
    }
}