3

我是 c# 和 sql 的新手,我正在创建一个简单的学生数据库,我添加了在 sql server 2008 中创建的数据库。现在我有一个表单,其中给出了输入,我有一个按钮插入来将数据插入到数据库中。但是当我单击按钮时,我得到了一个例外。

这是我的 App.config 文件

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

 </startup>
 <configSections>
 <connectionStrings>
  <appSettings>
  <add name="ConString" connectionString="Data Source=ARAVIND-HP\SQLEXPRESS;            Initial Catalog=test;Integrated Security=True" providerName="System.Data.sqlClient"/>
  </appSettings>
    </connectionStrings>

`

我使用的表格如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
 using System.Data;
using System.Drawing;
using System.Linq;
 using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

 namespace test
 {
   public partial class frmNewStudent : Form
  {

    public frmNewStudent()
    {
        InitializeComponent();
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void frmNewStudent_Load(object sender, EventArgs e)
    {

    }
 private void btnInsert_Click(object sender, EventArgs e)
    {
         DB_Access access = new DB_Access();
        access.add_student(txtRegNo.Text,txtFName.Text,txtLName.Text,txtPhone.Text);
        MessageBox.Show("Data added successfully");
    }
  }
 }

现在我有两个类 1.DB_access 2.DB_Connections

DB_access 的代码如下

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

  namespace test
  {
     class DB_Access
    {
    public SqlConnection conn;
    public DB_Access()
    {   
        conn = DB_Connection.GetConnection();
    }

    public void add_student(string regno, string fname, string lname, string phone)
    { 
        if(conn.State.ToString()=="Closed")
        {
            conn.Open();
        }
       SqlCommand newCmd = conn.CreateCommand();
        newCmd.Connection = conn;
        newCmd.CommandType = CommandType.Text;
        newCmd.CommandText = "insert into student values('"+ regno +"','"+ fname   +"','"+ lname +"','"+ phone +"')";
        newCmd.ExecuteNonQuery();
    }
   }
  }

DB_Connections 的代码如下

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

 namespace test
 {
    class DB_Connection
    {
    public static SqlConnection NewCon;

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

    public static SqlConnection GetConnection()
    {
        NewCon = new SqlConnection(ConStr);
        return NewCon;
    }


   }
  }

当我运行它并单击插入按钮时,出现以下异常:

test.exe 中发生了“System.TypeInitializationException”类型的未处理异常

附加信息:“test.DB_Connection”的类型初始化程序引发了异常。

和行'conn = DB_Connection.GetConnection();' 突出显示

我找不到错误。请帮我解决这个问题

4

5 回答 5

1

System.TypeInitializationException意味着程序无法创建类型 DB_Connection,更准确地说是无法初始化静态字段ConStr

部分使用不正确connectionStrings。查看http://msdn.microsoft.com/en-us/library/ms254494.aspx

于 2013-01-09T08:08:18.700 回答
0

您不需要<appSettings>节点,该部分应该只是:

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

TypeInitializationException当类的静态字段无法初始化(可能是由于异常)时,您会得到它。这ConnectionStrings["ConString"]将导致null,因此读取该.ConnectionString属性会产生 NullReferenceException。

于 2013-01-09T08:03:51.237 回答
0

似乎出现问题是因为ConStr无法初始化静态成员。您是否可以仅出于测试目的通过代码中其他位置的配置管理器访问连接字符串?

app.configHans Kesting 所说的附加提示:除非必须,否则不要手动编辑文件。您可以使用 Visual Studio 非常轻松地管理连接字符串和其他设置 - 这也可以避免错误。

于 2013-01-09T08:04:03.980 回答
0

web.config 中的connectionStrings设置格式错误。

如果在这条线上失败

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

的内容web.config应该是

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

于 2013-01-09T08:04:07.807 回答
0

我认为连接问题出在您的 App.config 文件中

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

</startup>

<configSections>  <connectionStrings>   <appSettings>   <add
name="ConString" connectionString="Data Source=ARAVIND-HP\SQLEXPRESS; 
Initial Catalog=test;Integrated Security=True"
providerName="System.Data.sqlClient"/>   </appSettings>
</connectionStrings>

您不需要在配置中标记 configSections。删除它并在配置中的启动下方粘贴正确的连接字符串。正如亚历山大所说,看看http://msdn.microsoft.com/en-us/library/ms254494.aspx并尝试这种方式:

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


<connectionStrings>
  <clear />
  <add name="ConString"
      connectionString="Data Source=ARAVIND-HP\SQLEXPRESS; Initial Catalog=test; Integrated Security=True" 
      providerName="System.Data.sqlClient"/>
</connectionStrings>


</configuration>"`

恕我直言,应该没问题

于 2013-04-01T12:50:59.927 回答