【问题标题】:Static readonly variable not initialized in DLL [closed]未在 DLL 中初始化的静态只读变量 [关闭]
【发布时间】:2016-04-05 10:32:05
【问题描述】:

我有一个要在另一个程序中使用的 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 类是否必须设为静态(我想避免这种情况)?

堆栈跟踪:

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

编辑:如果您反对/投票关闭,请告诉我原因。我觉得我已经提供了所有信息并且我一直保持领先,但请通过让我知道我失败的地方来帮助我改进 =)

【问题讨论】:

  • 显示//this is where the connectionString is used. 的代码和实际的堆栈跟踪。您收到的错误不是 .NET 运行时抛出的关于您的 connectionString 成员的错误,而是一些数据库连接代码。
  • 显示堆栈跟踪。代码看起来正确!

标签: c# dll static initialization


【解决方案1】:

您将connectionString 属性定义为fService 类的静态成员,但在fStat 类中使用变量connectionString。那不是同一个变量。您的 fService.connectionString 已初始化,您的 fStat.connectionString 未初始化。因此,SqlConnection 中的 ConnectionString 也未初始化,因此出现错误。

【讨论】:

  • 这么一个初学者的东西错过了,反正我很尴尬^^,谢谢你的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多