2016-07-15 3 views
0

私は非常に奇妙な問題を抱えています。C#SqlConnection(IISの問題?) "ConnectionStringプロパティが初期化されていません"

私は情報を取得するためにSQLデータベースに接続するC#/ ASP.Netアプリケーションを持っています。

ローカルで実行すると完全に動作します。データを取得できますが、問題はありません。

私は自分のネットワーク上のIISサーバーにデプロイしようとした、と私はエラーを取得するために開始しました: The ConnectionString property has not been initialized

これは、一般的に、変数が初期化されていないことを意味/奇妙である値のありませんローカルで実行されるためです。再構築し、再デプロイし、すべてのファイルがあることを確認しました。

私はコードのセクション(File.WriteAllText)を追加しました。

private DataTable getStoredProcResults(string procName, string[][] parameters) 
    { 
     InitSql(true); 

     DataTable dt = new DataTable(); 

     File.WriteAllText(@"C:\Temp\CONNECTION.LOG", connectionDetails.ConnectionString); //Added this 
     using (SqlConnection sqlConn = new SqlConnection(connectionDetails.ConnectionString)) 
     { 
      sqlConn.Open(); 
      SqlCommand sqlComm = new SqlCommand(procName, sqlConn); 
      foreach (string[] param in parameters) 
      { 
       sqlComm.Parameters.AddWithValue(param[0], param[1]); 
      } 

      sqlComm.CommandType = CommandType.StoredProcedure; 
      SqlDataAdapter da = new SqlDataAdapter(); 
      da.SelectCommand = sqlComm; 



      da.Fill(dt); 
      sqlConn.Dispose(); 
     } 


     return dt; 

    } 

これは奇妙なところです。私はconnectionDetails.ConnectionStringをテキストファイルに書き出すことができ、正しい値を持っています。 私はローカルでそれを実行し、接続文字列がまったく同じときに、IIS Webサーバーの値をテキストファイルと比較しました。

ConnectionStringが次のような行エラーが初期化されていない場合、どのようにテキストファイルに接続文字列を書き出すことができますか?私はページを訪問したときに

ここでIISサーバー上の完全なエラーがあります:

The ConnectionString property has not been initialized. 

Exception Details: System.InvalidOperationException: The ConnectionString property has not been initialized. 

スタックトレース:

[InvalidOperationException: The ConnectionString property has not been initialized.] 
    System.Data.SqlClient.SqlConnection.PermissionDemand() +6610944 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory,  TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6605639 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278 
    System.Data.SqlClient.SqlConnection.Open() +239 
    System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +292 
    System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +487 
    System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +293 
    GenericPortalWebForms.Logic.HourGlassJob.getResultSet(String sqlCommand, Boolean fromHourGlassDB) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:297 
    GenericPortalWebForms.Logic.HourGlassJob.setJobDetails(Int64 wrID) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:75 
    GenericPortalWebForms.Logic.HourGlassJob..ctor(DataRow hgJobRow) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:40 
    GenericPortalWebForms.HourGlass.GetAllHGjobs() in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Hourglass.aspx.cs:49 
    GenericPortalWebForms.HourGlass.Page_Load(Object sender, EventArgs e) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Hourglass.aspx.cs:26 
    System.Web.UI.Control.LoadRecursive() +71 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178 

============== ===========================

編集:申し訳ありませんが、私のコードはここにあります:

私は最初にオブジェクトを作成します。私はget goから初期化します。

public static ConnectionStringSettings HourglassDb 
    { 
     get { return ConfigurationManager.ConnectionStrings[ConnectionStringName.Split(',')[2]]; } 
    } 

とweb.configファイルから:コンフィグマネージャから

private ConnectionStringSettings connectionDetails = ConfigManager.HourglassDb; 

<add key="ConnectionStringName" value="name=BLAH1,BLAH2,BLAH3,BLAH4" /> 
<connectionStrings> 
    <add name="BLAH3" connectionString="Data Source=SERVER;Initial Catalog=DATABASE;User ID=USER;Password=PASSWORD;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+1

*** connectionDetails.ConnectionString ***の値はどのように設定されていますか?問題はおそらくそこにありますが、そのコードは表示されません。 – Esko

+0

お詫び申し上げます。 ConnectionStringSettingsは、config managerから設定され、単一の接続文字列を返します。 –

+0

ローカルIISインスタンスでこの問題を再現できますか? –

答えて

0

あなたはconnectionOpen()メソッドを呼び出す前に、コマンドオブジェクトを作成しようとしています。したがって、次のようなものがあります。

SqlCommand sqlComm = new SqlCommand(procName, sqlConn); 
sqlConn.Open(); 
関連する問題