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 ();
答案 0 :(得分: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();
}
在此示例中,someName
和someId
可能来自文本框。它们可能存储在其他地方。这取决于你从哪里获得这些。但这会持续改变数据库。
现在让我们开始研究连接字符串。我们绝对不希望那样硬编码。最常见的方法是将其放入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"]
现在,当您部署此应用程序时,您只需在部署期间修复连接字符串。