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

文字列をグローバルにするために上記のコードを試しました。問題は、アプリケーションが開かれるまでデータが保存されることです。アプリケーションを再起動するとすぐに、変更がデータベース ファイルに反映されません。また、展開中にデータベースを保持する場所を教えてください。SqlServer 2008 を使用しており、データベースの場所はアプリケーション フォルダーです。

私はこのコードを持っています:

 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();
}

この例では、someNameandsomeIdはテキスト ボックスから取得される場合があります。それらは別の場所に保管される場合があります。それらをどこから入手するかはあなた次第です。しかし、それはデータベースへの変更を保持します。

それでは、接続文字列を収容する作業に取り掛かりましょう。そのようなハードコーディングは絶対に望んでいません。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 に答える