C# 如何通过TableAdapter.update()更新从Datagrid到DB的所有更改
我使用的是Visual Studio 2015 Enterprise,32位版本 首先,在我的项目中,我创建了一个基于服务器的数据库,并将其命名为HR.mdf,因此我使用LocalDB,顺便说一句,我将其复制到输出字典属性设置为复制(如果更新的话)。在这个数据库中,我只有一个简单的表,定义如下:C# 如何通过TableAdapter.update()更新从Datagrid到DB的所有更改,c#,datagrid,dataset,tableadapter,C#,Datagrid,Dataset,Tableadapter,我使用的是Visual Studio 2015 Enterprise,32位版本 首先,在我的项目中,我创建了一个基于服务器的数据库,并将其命名为HR.mdf,因此我使用LocalDB,顺便说一句,我将其复制到输出字典属性设置为复制(如果更新的话)。在这个数据库中,我只有一个简单的表,定义如下: CREATE TABLE [dbo].[contractor] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name]
CREATE TABLE [dbo].[contractor] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR (50) NOT NULL,
[IsMarried] BIT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
其次,我创建了一个名为HR的数据集项,我将contractor表拖到设计面板中:
VS 2015自动生成了三个C类:HR(它是一个强类型数据集,有三个内部类,包括一个强类型数据表contractorDataTable,ant等等),contractorTableAdapter和TableAdapterManager
现在,我的解决方案如下所示:
第三,我随后将承包商的Datagrid从数据源选项卡拖到我的WPF主窗口:
运行程序时,主窗口如下所示:
我的主窗口后面的C#代码是:
using System;
using System.Windows;
namespace DataSetLab
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private DataSetLab.HR hR;
private DataSetLab.HRTableAdapters.contractorTableAdapter hRcontractorTableAdapter;
private System.Windows.Data.CollectionViewSource contractorViewSource;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
hR = ((DataSetLab.HR)(this.FindResource("hR")));
// Load data into the table contractor. You can modify this code as needed.
hRcontractorTableAdapter = new DataSetLab.HRTableAdapters.contractorTableAdapter();
hRcontractorTableAdapter.Fill(hR.contractor);
contractorViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("contractorViewSource")));
contractorViewSource.View.MoveCurrentToFirst();
}
private void click(object sender, RoutedEventArgs e)
{
try
{
hRcontractorTableAdapter.Update(hR.contractor);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
hRcontractorTableAdapter.Fill(hR.contractor);
}
}
}
}
但这一点从未达到
感谢您的帮助,提前谢谢。我在谷歌上搜索了很多,没有发现有人这样做。@dotNet是对的。原因是.mdf被覆盖,并且我的“复制到输出字典”属性设置不起作用,因为您需要重新启动Visual Studio 2015。最后我意识到这不是一个好问题,对此我感到抱歉,但我没有找到关闭它的方法,所以我在这里发布了一个答案。@dotNet是正确的。原因是.mdf被覆盖,并且我的“复制到输出字典”属性设置不起作用,因为您需要重新启动Visual Studio 2015。我最终意识到这不是一个好问题,对此我感到抱歉,但我没有找到关闭它的方法,因此我在这里发布了一个答案。此断点将不会被命中,因为此方法标记为
DebuggerNonUserCodeAttribute
。在单击事件中的Update()
调用上放置一个断点。我的怀疑是,每次运行项目时,您的mdf都会被覆盖。我知道您的意思。如果我只是在/bin/debug中运行生成的.exe,它会将数据保存到该路径下的.mdf副本中,并且似乎会被项目根目录下的副本覆盖。根据MSDN,将“Copy to Output dictionary”更改为“Copy always”以外的一些选项可以解决此问题。如果您了解所有内容,那么您的问题是什么?不会命中此断点,因为此方法标记为DebuggerNonUserCodeAttribute
。在单击事件中的Update()
调用上放置一个断点。我的怀疑是,每次运行项目时,您的mdf都会被覆盖。我知道您的意思。如果我只是在/bin/debug中运行生成的.exe,它会将数据保存到该路径下的.mdf副本中,并且似乎会被项目根目录下的副本覆盖。根据MSDN,将“复制到输出字典”更改为“始终复制”以外的其他选项可以解决此问题。如果您了解所有内容,那么您的要求是什么?
public partial class contractorTableAdapter : global::System.ComponentModel.Component {
//...
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
[global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
public virtual int Update(HR.contractorDataTable dataTable) {
return this.Adapter.Update(dataTable);
}
//...
}