代码之家  ›  专栏  ›  技术社区  ›  P.Brian.Mackey

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

  •  1
  • P.Brian.Mackey  · 技术社区  · 14 年前

    我想用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();
            //}
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   ChickSentMeHighE    14 年前

    正如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;
    
        2
  •  1
  •   pdiddy    14 年前

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

        3
  •  1
  •   watbywbarif    14 年前
    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相对应的对象模型。这将生成具有成员的类,因为表是您的dataabse。然后使用LINQ查询作为dataGeidView的数据源。