2016-04-05 9 views
-2

別のプログラムで使用しようとしているDLLがあります。私のDLLから静的読み取り専用変数がDLLで初期化されていません

:これはいくつかの問題が発生する部分である

public class fService 
{ 
    public static readonly string connectionString = "My connection string"; 
    ... 
    etc 
    ... 
    public static void myStaticMethod() 
    { 
     fStat x = new fStat(); 
    } 
} 

私の他のプログラムから:

private void btnSave_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     fService.myStaticMethod(); 
     MessageBox.Show("Success!"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

私が手に例外がThe ConnectionString property has not been initialized.です。

これはなぜですか?正しく初期化するにはどうすればよいですか?クラスfServiceは静的にする必要があります(私はそれを避けたいですか?)

のStackTrace:

at System.Data.SqlClient.SqlConnection.PermissionDemand() 
    at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
    at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at fManager.tableClasses.fStats..ctor() in e:\fManager\project\fManager\ConsoleApplication1\tableClasses\fStats.cs:line 55 
    at fManager.fService.constructElement(String header, String content, fService& service) in e:\fManager\project\fManager\ConsoleApplication1\fService.cs:line 964 
    at fManager.fService.LoadIni(String path) in e:\fManager\project\fManager\ConsoleApplication1\fService.cs:line 675 
    at fManagerF.mainForm.btnSave_Click(Object sender, EventArgs e) in e:\fManager\exeProject\fManagerF\fManager\mainForm.cs:line 54 

と問題が発生するように見える場所です:

public fStat() 
{ 
    using (SqlConnection conn = new SqlConnection(connectionString)) 
    { 
     SqlCommand cmd = new SqlCommand("fManager.getfStats", conn); 
     SqlCommand cmdCount = new SqlCommand("SELECT COUNT(*) FROM [fManager].[fStats]", conn); 
     _id = 0; 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 
     conn.Open(); 
     _id = (int)cmdCount.ExecuteScalar(); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 
    } 
} 

EDIT:あなたがクローズする/投票をdownvote場合は、その理由を教えてください。

+4

「// this is the connectionString is used。」のコードと実際のスタックトレースを表示します。あなたが得ているエラーは、.NETランタイムが 'connectionString'メンバーについて話すエラーではなく、いくつかのデータベース接続コードです。 – CodeCaster

+0

はスタックトレースを表示します。コードは正しく見えます! – Apoorv

答えて

2

connectionStringプロパティは、fServiceクラスの静的メンバーとして定義されていますが、あなたは可変クラスを使用しています。これは、すべての情報を提供していると思います。 fStatクラスのconnectionString。それは同じ変数ではありません。 fService.connectionStringが初期化されていますが、fStat.connectionStringは初期化されていません。したがって、SqlConnectionConnectionStringも初期化されていないため、エラーです。

+0

このような初心者のことを見逃して、私は恥ずかしそうに感じる^^とにかく、助けてくれてありがとう! –

関連する問題