数据未保存在应用程序关闭

时间:2013-11-08 13:57:21

标签: c# database

public static string cs = @"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+"\\TestDB.mdf;Integrated Security=True;User Instance=True";

我已经尝试了上面的代码来使字符串全局化。问题是数据被保存,直到应用程序打开。一旦我重新启动应用程序,更改就不会反映在数据库文件中。还帮助我在部署期间保留数据库的位置。我使用的是SqlServer 2008,数据库位置是Application文件夹

我有这段代码:

 SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestDB.mdf;Integrated Security=True;User Instance=True"); 
 cn.Open (); 
 string ins = "insert into table1 values ('"+textBox1.Text+"')"; 
 SqlCommand c = new SqlCommand(ins, cn ); 
 c.ExecuteNonQuery(); 
 string exts = "select * from table1 where kri='"+textBox1.Text+"'"; 
 SqlDataAdapter adp = new SqlDataAdapter(exts,cnn); 
 DataTable dt = new DataTable(); 
 adp.Fill(dt); 
 MessageBox.Show(dt.Rows[0][0].ToString()); 
 cn.Close ();

1 个答案:

答案 0 :(得分:1)

这里的第一个问题是你有点误解连接字符串。想想像你的地址一样的连接字符串。这不是你,而是你居住的地方。该连接字符串仅表明您要操作的数据所在的位置。

通过这种理解,我们可以很容易地回答有关在部署中应该做什么的问题。在部署期间,您将数据库加载到真正的SQL Server。 SQL Server将驻留某处,因此是该数据库的地址。因此,在部署时,您将更改该连接字符串,因为您要操作的数据将驻留在其他位置

至于持久更改数据库。我想这实际上取决于您使用什么框架来进行对数据库的更改。但是,让我们用普通的旧ADO类来计算一个例子。假设我们有一个名为tbl的表。在该表中有IDName,我们希望UPDATE该名称。所以,我们可以这样做:

using (SqlConnection c = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand("UPDATE tbl SET Name = @Name WHERE ID = @ID"))
{
    cmd.Parameters.AddWithValue("@Name", someName);
    cmd.Parameters.AddWithValue("@ID", someId);

    cmd.ExecuteNonQuery();
}

在此示例中,someNamesomeId可能来自文本框。它们可能存储在其他地方。这取决于你从哪里获得这些。但这会持续改变数据库。

现在让我们开始研究连接字符串。我们绝对不希望那样硬编码。最常见的方法是将其放入app.config/web.config文件中。所以,让我们这样做。在app.config/web.config文件中为<connectionStrings>部分添加密钥:

<configuration>
  <connectionStrings>
    <add name="Default"
      connectionString="{Enter Connection String Here}"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

好了,既然我们已经这样做了,那就让我们从那里得到那个连接字符串。首先添加对System.Configuration的引用。接下来,将该行代码修改为:

public static string cs = ConfigurationManager.ConnectionStrings["Default"]

现在,当您部署此应用程序时,您只需在部署期间修复连接字符串。