添加数据后如何保存数据集
本文关键字:保存 数据集 何保存 数据 添加 | 更新日期: 2023-09-27 18:24:50
是的,我知道这个问题在这里至少被问了5-10次,但我一辈子都无法获得任何保存数据的方法。
其想法是在表Companies
的列Name
(只有一列)中创建一个值为"asdf"`的新行。
我尝试了以下几种组合:
DatabaseDataSetTableAdapters.CompaniesTableAdapter adapter = new DatabaseDataSetTableAdapters.CompaniesTableAdapter();
DatabaseDataSet ds = new DatabaseDataSet();
adapter.Insert("asdf");
adapter.Fill(ds.Companies);
adapter.Update(ds.Companies);
ds.AcceptChanges();
ds.Companies.AddCompaniesRow("asdf");
ds.Companies.AcceptChanges();
ds.Companies.AddCompaniesRow("asdf");
ds.Companies.Rows[0]["Name"] = "asdf";
adapter.Update(ds.Companies);
我使用的是C#WPF.NET 4.5.1
它确实添加了数据,但在我退出程序时不会保存它——我知道它会添加数据,因为如果我调用这个方法两次,它就会崩溃,因为值不再是唯一的。
这是DatabaseDataSetTableAdapters
:
http://pastebin.com/gNsaRFD5
这也不起作用:
SqlConnection myConnection = new SqlConnection(global::AliBabaMailer.Properties.Settings.Default.DatabaseConnectionString);
myConnection.Open();
SqlCommand myCommand = new SqlCommand("INSERT INTO Companies (Name) " +
"Values ('string')", myConnection);
myCommand.ExecuteNonQuery();
myConnection.Close();
好的,所以你的问题是连接字符串:
Properties.Settings.Default.DatabaseConnectionString
此连接字符串的形式为:
“Data Source=ServerName;AttachDbFilename=|DataDirectory|'DataBaseName;Integrated Security=True”
|DataDirectory|
通常在这里:
C:'Users'UserName'AppData
当您保存数据时,它将被保存到"|DataDirectory|"位置的数据库文件中,但当您尝试使用服务器资源管理器查看数据时,您正试图从项目文件夹中的数据库文件查看数据,这就是为什么如果您尝试保存数据,然后在运行时查看数据,它会正常工作,因为这样您将查询存储数据的同一数据库。
|DataDirectory|:
|DataDirectory|
(包含在管道符号中)是一个替换字符串,指示数据库的路径。它消除了对完整路径进行硬编码的需要,这会导致一些问题,因为数据库的完整路径可以在不同的地方序列化。|DataDirectory|
还使共享项目和部署应用程序变得容易。
例如,不使用以下连接字符串:
"Data Source= c:'program files'MyApp'Mydb.sdf"
使用DataDirectory
,您可以拥有以下连接字符串:
“Data Source = |DataDirectory|'Mydb.sdf”
要设置DataDirectory
属性,请调用AppDomain.SetData
方法。如果未设置DataDirectory
属性,则将应用以下默认规则来访问数据库文件夹:
对于放在用户计算机上的文件夹中的应用程序,数据库文件夹使用应用程序文件夹。
对于在
ClickOnce
下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。
链接
编码建议:
试着这样处理你的命令和连接对象:
using(SqlConnection myConnection = new SqlConnection(global::AliBabaMailer.Properties.Settings.Default.DatabaseConnectionString))
using(SqlCommand myCommand = new SqlCommand("INSERT INTO Companies (Name) " + "Values ('string')", myConnection))
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}