为什么我在C#类中会出现这个错误?

为什么我在C#类中会出现这个错误?,c#,mysql,database,class,C#,Mysql,Database,Class,在任何人投票否决我的问题之前,我想说,这是我第一次使用C#中的类,我做了很多研究,但仍然遇到错误。我是新手 我试图将Insert、Delete、Update和Count语句放在一个类文件中,这样我的代码就会整洁 这是我制作的课堂档案(当然是在研究的帮助下): 我只是以某种形式尝试计数法。这是我的密码: MessageBox.Show("NUMBER OF ACCOUNTS IN DATABASE = "+ DBConnect.Count("SELECT count(*) FROM

在任何人投票否决我的问题之前,我想说,这是我第一次使用C#中的类,我做了很多研究,但仍然遇到错误。我是新手

我试图将Insert、Delete、Update和Count语句放在一个类文件中,这样我的代码就会整洁

这是我制作的课堂档案(当然是在研究的帮助下):

我只是以某种形式尝试计数法。这是我的密码:

        MessageBox.Show("NUMBER OF ACCOUNTS IN DATABASE = "+ DBConnect.Count("SELECT count(*) FROM usersettingsdb") +"", "CONFIRMATION");
但是我在
mycon.Open()
行的
OpenConnection()
方法的类文件中得到了这个错误:

Object reference not set to an instance of an object.
如何通过像这样调用DBConnect.MethodName()来删除上述错误并访问这些方法


我不太了解类,但我真的很想知道如何创建自己的函数/方法,以保持代码整洁。

好的,这是因为在某些情况下使用静态字段,而在其他情况下不使用静态字段,会把事情搞砸。有大量关于静态类/成员的文章,请参见示例

如果在使用时使用该类,则不会调用初始化代码

在您的情况下,您应该有一个DBConnect实例,并从方法中删除
static

var db = new DBConnect();
然后使用它进行查询:

db.Count(...);

另一种解决方案是在
Count
方法中调用
Initialize
方法。您应该修改
Initialize
,使其成为
静态
(您必须将所有字段都设置为
静态

确定这是因为您在某些情况下使用静态字段,而在其他情况下不使用静态字段,这会弄乱事情。有大量关于静态类/成员的文章,请参见示例

如果在使用时使用该类,则不会调用初始化代码

在您的情况下,您应该有一个DBConnect实例,并从方法中删除
static

var db = new DBConnect();
然后使用它进行查询:

db.Count(...);

另一种解决方案是在
Count
方法中调用
Initialize
方法。您应该修改
Initialize
,使其成为
静态的
(您必须将所有字段设置为
静态的

其他用户可能会回答此问题。所以我想提不同的事情。你的代码不是很好。您可以看看存储库模式的使用,而不是使用它。您还可以将petapoco用于数据库。这些有助于你的工作


其他用户可能会回答这个问题。所以我想提不同的事情。你的代码不是很好。您可以看看存储库模式的使用,而不是使用它。您还可以将petapoco用于数据库。这些有助于你的工作


您的
myCon
对象在
Initialize()
方法中初始化,该方法在类的构造函数中调用,因此仅当您创建
DbConnect
的实例时

mycon = new MySqlConnection(connectionString);

在代码中,没有
DbConnect
的实例,只需调用类的静态方法
Count
。因此,
myCon
null

您的
myCon
对象是在类的构造函数中调用的
Initialize()
方法中初始化的,因此仅当您创建
DbConnect
的实例时

mycon = new MySqlConnection(connectionString);

在代码中,没有
DbConnect
的实例,只需调用类的静态方法
Count
。因此,
myCon
null

“这是我第一次在C语言中使用类”到目前为止,你如何在没有类的情况下使用C语言?你的问题不是真正的“如何使用类”-而是“我为什么会出现这个错误”。也许可以更改标题以反映实际问题?“这是我第一次在C#中使用类”到目前为止,在没有类的情况下,您是如何使用C#的?您的问题不是真正的“如何使用类”-而是“我为什么会出现此错误”。也许可以更改标题以反映实际问题?静态方法可以以任何方式调用,ClassName.method()或ClassInstance.method()!没错!我做了这个var db=new DBConnect();int num=db.Count(“在usersettingsdb中选择Count(*));MessageBox.Show(“+num”);结果如何?同样的例外?您是否删除了方法Count中的“static”修饰符?但是我在db.Count(..)下得到了红色的波浪线,表示无法使用实例引用访问成员'classlib.db.Count';用类型名限定它instead@Appdeveloper-我认为特里皮诺的意思是,这个类中不应该有任何静态类。这样他可以确保构造函数始终被执行。静态函数无论如何都依赖于非静态代码,这是一种糟糕的做法。静态方法可以通过任何方式调用,ClassName.method()或ClassInstance.method()!没错!我做了这个var db=new DBConnect();int num=db.Count(“在usersettingsdb中选择Count(*));MessageBox.Show(“+num”);结果如何?同样的例外?您是否删除了方法Count中的“static”修饰符?但是我在db.Count(..)下得到了红色的波浪线,表示无法使用实例引用访问成员'classlib.db.Count';用类型名限定它instead@Appdeveloper-我认为特里皮诺的意思是,这个类中不应该有任何静态类。这样他可以确保构造函数始终被执行。静态函数依赖于非静态代码是不好的做法。哦,这就是为什么它会出现错误。非常感谢您的解释!!哦,这就是为什么它会出错。非常感谢您的解释!!