我是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();'突出显示
我无法找到错误。请帮助我解决此问题
答案 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>
当无法初始化类的静态字段时(可能是因为异常),您将获得TypeInitializationException
。 ConnectionStrings["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>"`
恕我直言,应该没问题