2010-09-09 63 views
1

我想用SQL中的表格數據填充gridview。我試圖返回我的SqlDataReader對象,並將其用作我的數據源,但是我收到的錯誤是關閉了閱讀器。我想將其轉換爲DataSet並返回一個數據集,但我找不到將行數據轉換爲數據集的簡單方法。我也讀過DataSets在.NET 3.5/4.0中已經死了,這是真的嗎?如何使用sql表格數據填充gridview

這是我的數據層方法。這將是真棒,如果我能有返回值可用作數據源:

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(); 
     //} 
    } 
} 
+0

是的,你正在關閉datareader在最後的聲明。 – 2010-09-09 15:04:00

回答

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; 
+0

我真的很接近這一點。 – 2010-09-09 16:22:11

1

我建議使用類型化數據集類型表適配器。將一個新的Typed-DataSet添加到您的項目中,並將Visual Studio中服務器資源管理器中的表直接拖放到您的類型化數據集中並對其進行配置。然後,您可以使用該類型數據集作爲您的數據網格的數據源。

+0

我喜歡打字的數據集。自動生成的表格適配器的東西非常漂亮。謝謝 – 2010-09-09 16:21:16

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

SqlCommandBuilder應該使用,如果你想更新的dataGridView做回SqlDatabase變化!比你可以寫:

dataAdapter.Update(dataSet); 

如果你想使用新的東西,你可以生成對應於你SqlMetal工具SqlDatabase對象模型。這將生成具有成員的類,因爲表是數據庫。之後,您使用LINQ查詢作爲dataGeidView的數據源。