是的,我知道这个问题在这里至少要问过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
:
这也不起作用:
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();
答案 0 :(得分:1)
好的,你的问题是连接字符串:
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();
}