2015-01-12 15 views
1

我有這樣的代碼:無效試圖調用時閱讀的讀者在使用Windows WCF服務關閉320交織應用

public DataTable GetScriptDetails() 
{ 
    DataTable dtScriptDetails = new DataTable(); 

    SqlConnection con = new SqlConnection("Data Source=sample;Initial Catalog=ScriptManagement;User ID=sa;Password=abcde"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select ScriptName,UploadDate from ScriptDetails", con); 

    using (SqlDataReader dataReader = cmd.ExecuteReader()) 
    { 
     while (dataReader.Read()) 
     { 
      dtScriptDetails.Load(dataReader); 
     } 
     dataReader.Close(); 
    } 
    con.Close(); 
    return dtScriptDetails; 
} 

,但我得到這個錯誤:

無效試圖調用閱讀時閱讀器關閉。

我搜查了很多,但無法解決這個問題。 任何幫助將不勝感激。

+1

你檢查了連接字符串嗎?可以嗎?我的意思是你可以使用你提供給'SqlConnection'的連接字符串連接到你的數據庫嗎? – Christos

+0

是的。對於我將一些值插入到數據庫的另一種方法,它工作正常。 –

回答

1

DataTable.Load方法加載來自閱讀器的所有數據。您不需要循環閱讀器中的任何行。所以,在你的代碼中,你可以刪除循環,並有這樣的事情:

using (SqlDataReader dataReader = cmd.ExecuteReader()) 
    { 
      dtScriptDetails.Load(dataReader); 
    } 
+0

謝謝。這解決了我的問題,但現在獲取數據時,我收到了錯誤:接收到http:// localhost:62476/DeploymentMangerService.svc的HTTP響應時發生錯誤。這可能是由於服務端點綁定不使用HTTP協議。這也可能是由於HTTP請求上下文被服務器中止(可能是由於服務關閉)。查看服務器日誌獲取更多詳細信 –

+0

我的代碼如下: DeploymentMangerServiceClient objDeploymentMangerClient = new DeploymentMangerServiceClient(); DataTable dtScriptdetails = objDeploymentMangerClient.GetScriptDetails(); –

1

我不知道是否能解決此問題,但使用的,如果+ HasRows代替環+ Read的:

using (SqlDataReader dataReader = cmd.ExecuteReader()) 
{ 
    if (dataReader.HasRows) 
    { 
     dtScriptDetails.Load(dataReader); 
    } // no need to close it if you use using 
} 

不過,我會用SqlDataAdapter填寫表格:

SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.Fill(dtScriptDetails); 
+0

這也適用於我的情況。非常感謝@Tim。 –

相關問題