我的c#代码在访问sql server时抛出异常

时间:2013-01-09 07:57:02

标签: c# sql-server

我是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();'突出显示

我无法找到错误。请帮助我解决此问题

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分: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>

  

答案 4 :(得分: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>"`

恕我直言,应该没问题