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"/>
但問題是我沒有手動打開任何SQLDataReader。我已經使用數據源工具來添加一個新的數據源,它給了我一個數據集及其相關的數據適配器。我使用適配器的Get()方法在表中獲取結果,並使用Update方法更新數據庫。那麼我應該如何控制數據收集器 –
@SaifulShubho你可以更新你的問題並給我們這個方法:'usersAdapter.Update(users);'。 – Ramin
我不確定從哪裏可以獲取代碼,因爲我使用的是由Visual Studio創建的數據源。但是從設計者我得到這個查詢在更新方法 –