我想用来自SQL的表格数据填充一个网格视图。我尝试只返回我的SqlDataReader对象并将其用作我的数据源,但是我得到了读取器已经关闭的错误。我想将其转换为dataset并只返回一个dataset,但是我找不到一种简单的方法将行数据转换为DataSet。我还读到.NET 3.5/4.0中的DataSets已经死了,这是真的吗?
下面是我的数据层方法。如果我可以返回一些可用作数据源的东西,那就太棒了:
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();
//}
}
}
发布于 2010-09-09 15:25:45
正如卡洛斯·穆尼奥斯所说,您关闭了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;
发布于 2010-09-09 14:57:26
我建议将类型化数据集与类型化表适配器一起使用。将新的类型化数据集添加到项目中,并将表从visual studio中的服务器资源管理器直接拖放到类型化数据集中,然后对其进行配置。然后,您可以将该类型的数据集用作数据网格的数据源
发布于 2010-09-09 15:42:09
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!比你能写的:
dataAdapter.Update(dataSet);
如果你想使用新东西,你可以用SqlMetal工具生成与你的SqlDatabase相对应的对象模型。这将生成将成员作为表的类,这是您的数据库。在此之后,您可以使用LINQ query作为您的dataGeidView的数据源。
https://stackoverflow.com/questions/3677608
复制