-1

Visual Studioで正常に機能するソフトウェアを作成しました。しかし、任意のコンピューターに展開すると、データベースへの接続を試みているときに次のエラーが発生します:-

************** Exception Text **************
System.InvalidOperationException: The ConnectionString property has not been initialized.
   at System.Data.SqlClient.SqlConnection.PermissionDemand()
   at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at DentalGood.frmLogin.startLogin() in E:\PRGS\DentalGood\DentalGood\frmLogin.cs:line 28
   at KryptonForm.frmMain.btnLogin_Click(Object sender, EventArgs e) in E:\PRGS\DentalGood\DentalGood\frmMain.cs:line 216
   at ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton.OnClick(EventHandler finishDelegate)
   at ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton.PerformClick(EventHandler finishDelegate)
   at a5.d(Object A_0, EventArgs A_1)
   at eq.b(Object A_0, EventArgs A_1)
   at ek.b(EventArgs A_0)
   at ek.a(Control A_0, Point A_1, MouseButtons A_2)
   at ComponentFactory.Krypton.Toolkit.ToolTipController.MouseUp(Control c, Point pt, MouseButtons button)
   at ComponentFactory.Krypton.Toolkit.ViewBase.MouseUp(Point pt, MouseButtons button)
   at ComponentFactory.Krypton.Toolkit.ViewBase.MouseUp(Point pt, MouseButtons button)
   at ComponentFactory.Krypton.Toolkit.ViewBase.MouseUp(Point pt, MouseButtons button)
   at ComponentFactory.Krypton.Toolkit.ViewBase.MouseUp(Point pt, MouseButtons button)
   at ComponentFactory.Krypton.Toolkit.ViewManager.MouseUp(MouseEventArgs e, Point rawPt)
   at ComponentFactory.Krypton.Toolkit.ViewControl.OnMouseUp(MouseEventArgs e)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at ComponentFactory.Krypton.Toolkit.ViewControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.6400 (Win8RTMGDR.050727-6400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

program.cs ファイルで ConnectionString を初期化しました。接続文字列をファイルに保存し、接続が必要になるたびに読み込みます。助けはありますか?

4

1 に答える 1

0

まず、文字列からサーバーの名前を除外します。代わりにドット (.) を入力します。これは、localhost にインストールされた SQL サーバーに接続することを意味します。アプリケーション接続文字列をテストする機会を提供します。

次に、接続文字列をファイルに保存するのではなく、プログラムのコードで生成することはできません。そのようなものを入力できます (Program.cs ではありません)。

 public Form2()
    {
        InitializeComponent();
        conn = "";
    }

  private void btnOK_Click(object sender, EventArgs e)
    {
         conn = CreateConn(conn, comboBox1.Text);
         SqlConnection connect = new SqlConnection(conn);
         MessageBox.Show(connect.ConnectionString.ToString());
    }
    public static string CreateConn(string connectString, string param)
    {
        connectString = String.Format("Data Source={0};Initial Catalog=db_Raspisanie;Integrated Security=True", 
            param);
        return connectString;
    }

UPD2. ComboBox1 プロパティの SelectedText に (local) と記述できます。これにより、ユーザーがデータベースが保存されているローカル サーバーで作業している場合に、毎回サーバー名を入力しなくて済むようになります。

これは非常に単純な方法で、MessabeBox.Show取得した接続文字列が表示されます。

アップデート。

ファイルに保存する必要がある場合 (この目的で .txt を使用します)、次のコードを使用できます。

     /*Code of Form2, which is Login like*/
  public static string conn;
    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void btnOK_Click(object sender, EventArgs e)
    {
         conn = CreateConn(conn);
         SqlConnection connect = new SqlConnection(conn);

         //MessageBox.Show(connect.ConnectionString.ToString());

         Form1 fr = new Form1();
         fr.ShowDialog();
    }
      public static string CreateConn(string connectString)
    {
        string fileName = Application.StartupPath + "\\string.txt";
        FileStream fs = new FileStream(fileName, FileMode.Open);
        StreamReader strem = new StreamReader(fs);
        conn = strem.ReadLine();
        connectString = conn;
        strem.Close(); fs.Close();

        return connectString;
    }


       /*Code of Form1 which is main form*/

 public Form1()
    {
        InitializeComponent();
        string param = "";
        param = Form2.conn;
         con = new SqlConnection(param);
    }
    SqlConnection con;
    SqlDataAdapter da;
    DataSet ds;
    private void Form1_Load(object sender, EventArgs e)
    {
        da = new SqlDataAdapter("Select * from Table1", con);
        ds = new DataSet();
        da.Fill(ds, "Table1");
        dataGridView1.DataSource = ds.Tables["Table1"];

    }

.txt ファイルの内容は、あなたが書いたものと同じです:

    Server=.;database=db_Raspisanie;trusted_connection=true

必要に応じてすべてを含めたようです。例外がある場合は書いてください。テストしましたが、そうかもしれません。

于 2013-04-11T15:58:26.313 に答える