如何使用sql中的表数据填充gridview

时间:2010-09-09 14:36:53

标签: c# asp.net .net-3.5

我想用SQL中的表数据填充gridview。我尝试返回我的SqlDataReader对象并将其用作我的数据源,但是我收到的错误是读者已关闭。我想将其转换为DataSet并返回一个数据集,但我找不到将行数据转换为数据集的简单方法。我还读过DataSets在.NET 3.5 / 4.0中死了,这是真的吗?

这是我的数据层方法。如果我可以返回可用作数据源的东西,那将是非常棒的:

public SqlDataReader GetSites()
{
    SqlConnection sqlCon = null;
    SqlDataReader rdr = null;
    try
    {
        sqlCon = new SqlConnection(StoredProcedures.conString);
        sqlCon.Open();
        SqlCommand cmd = new SqlCommand("GetSites", sqlCon);
        cmd.CommandType = CommandType.StoredProcedure;
        rdr = cmd.ExecuteReader();
        return rdr;
    }
    finally
    {
        if (sqlCon != null)
        {
            sqlCon.Close();
        }
        //if (rdr != null)
        //{
        //    rdr.Close();
        //}
    }
}

3 个答案:

答案 0 :(得分:4)

正如Carlos Munoz所说,你关闭了你的sql连接。您需要打开SQL连接才能让读者阅读。只需注释掉

if (sqlCon != null)
{
        sqlCon.Close();
}

你应该没事。

另一种选择是使用我喜欢的SqlDataAdapter。

这是一个例子......

public static DataSet GetDataSet(string sql, DatabaseType database)
{
    using ( var connection = new SqlConnection( GetConnectionString(database) ) )
    {
        using (var adapter = new SqlDataAdapter(sql, connection))
        {
            var temp = new DataSet();
            adapter.Fill(temp);
            return temp;
        }
    }
}

只需将数据网格的数据源设置为返回的数据集表。

DGV.DataSource = DatabaseFunction.GetDataSet(sql, DatabaseType.Outage).Tables[0].DefaultView;

答案 1 :(得分:1)

我建议使用带有类型表适配器的Typed-Dataset。将新的Typed-DataSet添加到项目中,并将表格从visual studio中的服务器资源管理器直接拖放到您的类型化数据集中并进行配置。然后,您可以使用该类型数据集作为datagrid的数据源

答案 2 :(得分:1)

dataAdapter = new SqlDataAdapter(sqlQuery, DatabaseConnectionString);
SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
builder.GetUpdateCommand();
dataSet = new DataSet();
DataAdapter.Fill(dataSet);
dataGridView.DataSource = dataSet.Tables[0];

如果要将dataGridView中所做的更改更新回SqlDatabase,则应使用SqlCommandBuilder!你可以写下:

dataAdapter.Update(dataSet);

如果要使用新东西,可以使用SqlMetal工具生成与您的SqlDatabase对应的对象模型。这将生成具有成员作为表的数据类的类。之后,您使用LINQ查询,该查询用作dataGeidView的数据源。