我目前正在尝试使用C#程序修改本地数据库。我按照这个例子:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.commit.aspx
问题是修改是在程序运行时完成的(例如,如果我添加一个新行,我会在程序中看到它),但当我停止程序并检查数据库时,有没有变化 - 数据库与执行前完全相同。
我已经在这个问题上工作了好几天,但还没有找到解决方案。
以下是我工作的摘录:
SqlConnection connectionLocale = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|LocalDB.mdf;Integrated Security=True");
SqlCommand command2 = connectionLocale.CreateCommand();
SqlTransaction transaction;
connectionLocale.Open();
transaction = connectionLocale.BeginTransaction();
command2.Connection = connectionLocale;
command2.Transaction = transaction;
try
{
command2.CommandText = "DELETE FROM Chercheur";
command2.ExecuteNonQuery();
transaction.Commit();
Console.WriteLine("commit ok");
}
catch
{
transaction.Rollback();
}
connectionLocale.Close();
我正在使用带有.mdf数据库的Visual Vtudio 2012。
经过一些研究后,我看到连接(AttachDbFilename=|DataDirectory|LocalDB.mdf)
创建了一个临时数据库,并且所有更改都在此临时数据库上完成。
如何影响原始数据库而不是此临时数据库?
答案 0 :(得分:1)
要保持更改,您需要将数据库放在真正的SQL Server上,并将连接字符串更改为:Server=someServerName; Database=someDatabaseName; Trusted_Connection=true
或Server=someServerName; Database=someDatabaseName; User ID=someSqlUser; Password=somePassword
。
答案 1 :(得分:1)
您需要将连接字符串指向正确的实例("原始数据库"):
SqlConnection connectionLocale = new SqlConnection("Data Source = YourInstanceName; initial catalog = YourDatabaseName; Integrated Security=True");
替换以下值:
YourInstanceName - 数据库所在的SQL Server实例的名称(可以在连接到SQL实例时从select @@servername;
获取)
YourDatabaseName - 您要修改数据的数据库的名称
连接字符串告知提供商 以定位您的查询。如果您没有指向正确的目标SQL Server实例(和数据库),那么您将获得您遇到的不良结果。
答案 2 :(得分:0)
您的连接字符串指向本地数据库。您的连接字符串 -
"Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|LocalDB.mdf;Integrated Security=True"
必须将更改为指向您的实际数据库。
查看here以获取生成连接字符串的过程。 您还可以参考connectionstring.com获取示例连接字符串。