Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用sql中的表数据填充gridview_C#_Asp.net_.net 3.5 - Fatal编程技术网

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

C# 如何使用sql中的表数据填充gridview,c#,asp.net,.net-3.5,C#,Asp.net,.net 3.5,我想用SQL中的表数据填充gridview。我试图返回我的SqlDataReader对象并将其用作我的数据源,但是我得到了一个错误,即读卡器已经关闭。我想将其转换为一个数据集并返回一个数据集,但我找不到一种简单的方法将行数据转换为数据集。我还读到数据集在.NET3.5/4.0中已经过时了,这是真的吗 这是我的数据层方法。如果我能返回一些可用的数据源,那就太棒了: public SqlDataReader GetSites() { SqlConnection sqlCon = null;

我想用SQL中的表数据填充gridview。我试图返回我的SqlDataReader对象并将其用作我的数据源,但是我得到了一个错误,即读卡器已经关闭。我想将其转换为一个数据集并返回一个数据集,但我找不到一种简单的方法将行数据转换为数据集。我还读到数据集在.NET3.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();
        //}
    }
}

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

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

正如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;

正如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;
如果要将dataGridView中所做的更改更新回SqlDatabase,则应使用SqlCommandBuilder!比你能写的还要多:

dataAdapter.Update(dataSet);
如果您想使用新的东西,可以使用SqlMetal工具生成与您的SqlDatabase对应的对象模型。这将生成具有成员的类,因为表是您的dataabse。之后,使用LINQ查询,该查询用作dataGeidView的数据源

如果要将dataGridView中所做的更改更新回SqlDatabase,则应使用SqlCommandBuilder!比你能写的还要多:

dataAdapter.Update(dataSet);

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

是的,在finally语句中关闭datareader。是的,在finally语句中关闭datareader。我喜欢类型化的数据集。使用表适配器自动生成的东西非常漂亮。谢谢,我喜欢类型化的数据集。使用表适配器自动生成的东西非常漂亮。谢谢,我用了一些非常接近这个的东西,我用了一些非常接近这个的东西。