Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DLL中未初始化静态只读变量_C#_Dll_Static_Initialization - Fatal编程技术网

C# DLL中未初始化静态只读变量

C# DLL中未初始化静态只读变量,c#,dll,static,initialization,C#,Dll,Static,Initialization,我有一个DLL,我正试图在另一个程序中使用。这是导致一些问题的部分: 从我的dll: public class fService { public static readonly string connectionString = "My connection string"; ... etc ... public static void myStaticMethod() { fStat x = new fStat(); }

我有一个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);
    }
}
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();
    }
}
来自我的其他程序:

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);
    }
}
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();
    }
}
我得到的例外情况是,
ConnectionString属性尚未初始化。

为什么会这样?如何正确初始化它?类fService必须是静态的吗(我希望避免这种情况)

StackTrace:

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);
    }
}
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();
    }
}
这就是问题的根源:

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

编辑:如果您投票否决/投票关闭,请告诉我原因。我觉得我已经提供了所有的信息,我仍然停留在topid上,但是请让我知道我失败的地方,以帮助我改进=)

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

显示
的代码。

这是使用ConnectionString的地方。
和实际堆栈跟踪。您得到的错误不是.NET运行时抛出的错误,它谈论的是您的
connectionString
成员,而是一些数据库连接代码。显示堆栈跟踪。代码看起来是正确的!这样一个初学者的东西错过了,我感到尴尬^^^无论如何,谢谢你的帮助!