C# 中的类型初始化异常

2023-12-24

我将根据教程创建一个学生信息系统。 一旦用户想要将新学生添加到数据库中,就会发生以下异常。

我尝试了解一些有关 TypeInitializationException 的知识,并且我通过它的名称了解了一些..但我无法完全理解它。此外,我正在遵循的教程中没有出现异常。我是这种类型的 OOP 编程和处理错误的新手。我在下面包含了我的数据库连接和数据库访问类。

My DB_Connection class

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace studentInformationSystem
{
    class DB_Connection
    {
        public static SqlConnection NewConnection;
        public static string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;

        public static SqlConnection getConnection()
        {
            NewConnection = new SqlConnection(ConString);
            return NewConnection;
        }
    }
}

My DB_Access class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace studentInformationSystem
{
    class DB_Access
    {
        public SqlConnection conn;
        public DB_Access()
        {
            conn = DB_Connection.getConnection();
        }

        public void AddStudent(string regNo, string fName, string lName, string phoneNumber)
        {
            if(conn.State.ToString() == "Closed")
            {
                conn.Open();
            }

            SqlCommand newCommand = conn.CreateCommand();
            newCommand.Connection = conn; //why we use it..???
            newCommand.CommandType = CommandType.Text;
            newCommand.CommandText = "insert into student values('" + regNo + "','" + fName + "','" + lName + "','" + phoneNumber + "')";
            newCommand.ExecuteNonQuery();

        }
    }
}

这是我的连接字符串

  <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <configSections>

    <connectionStrings>
      <add name="ConString" connectionString="Data Source=SADID-PC\SQLEXPRESS;Initial Catalog=Test1;Integrated Security=True" 
           providerName="System.Data.sqlClient" />  
    </connectionStrings>

  </configSections>

</configuration>

在你的情况下:

这意味着以下行失败:

public static string ConString = 
    ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;

确保这里不会发生异常!由于该行是作为以下部分执行的DB_Connection的类型初始化,第一次访问时出现异常DB_Connection,这发生在DB_Connection.getConnection()- 因为你没有其他(关键)初始化逻辑DB_Connection,它基本上has成为那条线。

我强烈建议移动逻辑,例如初始化ConString到一个方法(类似于Init),这样您就可以更好地控制所发生的事情 - 并且更容易调试!

我想从那里开始ConnectionStrings["ConString"]回报null或者本身抛出异常 - 但你会很容易发现这一点。 ;)

更一般的描述,适合有以下情况的人similar问题:

每当TypeInitializationException被抛出,检查all您在引发异常的语句中首次引用的类型的初始化逻辑。

初始化逻辑包括:类型的静态构造函数和(如本例中的)字段初始化。

如果此时您仍然不知道实际异常在哪里(然后触发TypeInitializationException)发生时,您应该考虑将所有(或部分)初始化逻辑移至额外的静态方法。现在,当您手动调用此方法时(当然是在首次访问类型之前),您可以从 IDE 调试功能中受益,最重要的是,您将获得actual异常抛出到你的头上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的类型初始化异常 的相关文章

随机推荐

  • 删除按钮删除数据库行

    我刚刚做了一个php函数 function deletebooking orderID sql DELETE FROM bs reservations WHERE id orderID result mysql query sql or d
  • 告诉 CMake 对来自 CMake 的 C 文件使用 C++ 编译器?

    这类似于通过 Visual Studio 强制 CMake 使用 C 编译器来处理 C 文件 https stackoverflow com q 10138311 但并不完全相同 它不一样 因为它的 CMake 文件导致了失败 我正在研究几
  • WPF 可执行文件无法在 Visual Studio 之外运行(资源字典问题)

    我有一个 WPF 应用程序 如果我在 Visual Studio 中 调试 F5 调试和发布模式均有效 该应用程序可以完美运行 但如果我尝试双击 bin Release 文件夹中的 exe Windows 会终止该应用程序立即地 问题似乎是
  • Internet Explorer 8 开发人员工具不显示

    最近一天 在 Internet Explorer 8 中 开发人员工具窗口将不会显示 当我按 F12 或使用菜单 工具 gt 开发人员工具 时 我在任务栏中看到 开发人员工具 条目 但实际窗口不会显示 已经运行了一个月左右 一切正常 我尝试
  • 当手机中的应用程序进入后台时,Apple Watch 和 iPhone 未连接

    我在模拟器中运行了我的 iPhone 应用程序及其手表扩展 我从手机向手表发送消息 反之亦然 消息发送和接收没有任何问题 但是 当我将 iPhone 应用程序发送到后台 然后从手表向 iPhone 发送消息时 我不断收到以下日志 WC 33
  • 如何在 apollo graphql 服务器中创建嵌套解析器

    给定以下 apollo 服务器 graphql 架构 我想将它们分解为单独的模块 因此我不希望在根查询模式下进行作者查询 并希望将其分开 所以我在将其添加到根查询之前添加了另一个名为authorQueries的层 type Author i
  • 为什么屏幕截图不起作用(黑屏)?

    服务是 允许服务与桌面交互 unit Unit1 interface uses Windows Messages SysUtils Classes Graphics Controls SvcMgr Dialogs type TCopyDes
  • wget 转义特殊字符

    我正在尝试使用 wget 下载该网页的内容 https bibliotheque numerique paris fr search aspx SC DEFAULT Search query ForceSearch f Page 0 Pag
  • 生成复合饼图或饼图饼图

    下面是一个复合饼图的示例 也称为使用 Excel 绘制的饼图 是否可以使用 python 创建这样的图形 是的 这可以通过 matplotlib 实现 下面是改编自的示例here https matplotlib org 3 1 1 gal
  • Sparkfun Edge 引导加载程序问题

    今天终于到了 Sparkfun 板边板 遵循这个写得很好的指南 https codelabs developers google com codelabs sparkfun tensorflow 3 https codelabs devel
  • Sitecore索引重建实践

    在我们的 Sitecore 项目 6 6 0 rev 130404 中 我们拥有超过 200 万个 Sitecore 项目 我们配置了多个 Lucene 索引 每个索引对应这些项目的子集 我们面临的问题是重新构建这些索引所需的时间 特别是对
  • 将图像保存到文件目录

    我正在尝试使用文件目录保存图像 但我无法在没有错误的情况下保存图像 没有这样的文件夹 这是我的代码 我不确定我哪里出错了 Write image to directory func writeImageToPath path String
  • 当没有根标签时使用 lxml 解析 html

    我一直在使用lxml 和formalchemy 为sqlalchemy 构建一个脚手架库 但我很难让它们很好地发挥作用 具体来说 formalchemy FieldSet render 返回没有根标签的 html 片段 我似乎无法弄清楚如何
  • 在Python中生成随机文件名的最佳方法

    在Python中 生成一些随机文本以添加到我保存到服务器的文件 名称 之前的好方法或最佳方法是什么 只是为了确保它不会被覆盖 谢谢你 你可以使用UUID模块 http docs python org library uuid html用于生
  • VSTS - 持续交付 - 发布触发器不适用于标签

    更新2017 02 28 发布触发器中的标签不是源代码控制标签 它们是可以由构建步骤生成的标签 您可以自动标记您的构建 见下文 或在构建过程中手动标记 我还没有尝试过 我对标签的假设是flawed 这使得这个问题几乎无效 不过 我将尝试看看
  • 有没有办法在 Chrome DevTools 中更改时区?

    我用 JavaScript 创建了一个工具 用于确定当前 UTC 时间并检查另一个预定日期是否已经过去 我想将浏览器更改为另一个时区 看看测试是否仍然通过 但我无法找到执行此操作的方法 有没有办法在 Chrome DevTools 中做到这
  • SQL 强制显示十进制值

    我正在使用 Firebird 数据库并尝试以下 sql 但每次它返回 0 而不是 0 61538 等 SELECT COUNT myfield 26 totalcount FROM mytable 现在 当我删除 26 时 总计数将返回 1
  • 有没有办法增加代码本身的Java堆空间? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以动态更改最大 java 堆大小 https stackoverflow com questions 1091566 is it possible to dynamically change m
  • 在 R 传单中标记鼠标单击事件以获得闪亮效果

    如何在 R 中的传单地图中的标记上接收鼠标单击事件 我正在使用 RStudio 传单并运行 Shiny 我想获取标记的值 例如 ID 并使用它来更新侧边栏面板 你想使用input MAPID marker click 请参阅下面的示例 li
  • C# 中的类型初始化异常

    我将根据教程创建一个学生信息系统 一旦用户想要将新学生添加到数据库中 就会发生以下异常 我尝试了解一些有关 TypeInitializationException 的知识 并且我通过它的名称了解了一些 但我无法完全理解它 此外 我正在遵循的