2012-12-24 197 views
0

我在C#中很新。我正在編寫一個小型的GUI數據庫應用程序,它使用一個數據網格來顯示錶格數據。當我在網格中編輯一行時,按下更新按鈕調用tableadapter的更新函數,並將更改傳播回數據庫。然後我實現了row change事件的處理程序,它依次調用tableadapter的更新函數。但是這次當某個值被改變並且輸入鍵被按下時,處理程序被調用,並且引發InvalidOperationException異常,並顯示消息「已經有一個與此命令關聯的打開的DataReader,它必須先關閉」。但數據庫無論如何都會改變。如何阻止異常被提出。連接字符串中有多個活動結果集設置爲true。WPF datagrid更新數據庫

構造

public WSim(MainWindow h) 
{ 
    InitializeComponent(); 

    //database connection with strongly typed dataset 
    usersAdapter = new testDBDataSetTableAdapters.usersTableAdapter(); 
    users = usersAdapter.GetUsers(); 

    users.usersRowChanged +=new testDBDataSet.usersRowChangeEventHandler(users_usersRowChanged); 

    this.DataContext = users.DefaultView; 
} 

行更改的事件處理程序

private void users_usersRowChanged(object sender, testDBDataSet.usersRowChangeEvent e) 
{ 
    output.Content = "Row Modified"; 
    usersAdapter.Update(users); 
} 

數據網格XAML

<DataGrid Height="200" HorizontalAlignment="Left" Margin="26,249,0,0" Name="userGrid" VerticalAlignment="Top" Width="381" AutoGenerateColumns="True" 
       SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding}" 
       CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True" 
       CanUserAddRows="True" CanUserDeleteRows="True"/> 

回答

0

作爲例外說,你應該先關閉閱讀器。你沒有提供足夠的信息,我無法解釋更多;但看到這個link。我認爲它會幫助你。

+0

但問題是我沒有手動打開任何SQLDataReader。我已經使用數據源工具來添加一個新的數據源,它給了我一個數據集及其相關的數據適配器。我使用適配器的Get()方法在表中獲取結果,並使用Update方法更新數據庫。那麼我應該如何控制數據收集器 –

+0

@SaifulShubho你可以更新你的問題並給我們這個方法:'usersAdapter.Update(users);'。 – Ramin

+0

我不確定從哪裏可以獲取代碼,因爲我使用的是由Visual Studio創建的數據源。但是從設計者我得到這個查詢在更新方法 –