-1
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 ();
4

1 回答 1

1

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

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

至于持久化对数据库的更改。我想这实际上取决于您用来更改数据库的框架。但是,让我们用普通的旧 ADO 类来做一个例子。假设我们有一个名为 的表tbl。在那个表中有一个ID和一个Name,我们想要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"]

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

于 2013-11-08T14:10:02.443 回答