我正在使用c sharp和ms sql sever 2008中的一个简单的数据库项目,但我在编译程序时遇到错误,它会弹出这条消息:
'StudentsInformationSystem.DB_conection'的类型初始值设定项引发了异常
我的代码:
namespace StudentsInformationSystem
{
class DB_Access
{
private SqlConnection conn;
public DB_Access()
{
conn = DB_conection.GetConnection(); //this is where i am getting the error on this line of code
}
public void add_student(string regNo,string fname, string lname, string phoneNo)
{
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 + "','" + phoneNo + "')";
newCmd.ExecuteNonQuery();
}
}
}
答案 0 :(得分:3)
除了SQL注入问题之外,您的问题可能来自将ConnectionState与字符串进行比较。
/* this will never be true because "closed" is not equal to "Closed" */
if (conn.State.ToString() == "closed")
{
conn.Open();
}
......应该是:
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
您还应该尽可能接近其使用情况获取连接,永远将其存储为类级变量。
using (var conn = DB_conection.GetConnection())
using (var cmd = conn.CreateCommand())
{
// use conn & cmd
// they will be closed & disposed of when they leave this block
}
答案 1 :(得分:0)
假设您的DB_conection
没有问题(您尚未分享详情)
代码中的改进很少
public void add_student(string regNo,string fname, string lname, string phoneNo)
{
if (conn.State == ConnectionSate.Closed)
conn.Open();
SqlCommand newCmd = conn.CreateCommand();
newCmd.CommandText = "insert into student values('" + regNo + "','" + fname + "','" + lname + "','" + phoneNo + "')";
newCmd.ExecuteNonQuery();
}
为了快速访问数据库,我建议不要在每次查询后关闭连接,并且您已经这样做了。但是,在使用数据读取器之后,您应该关闭数据读取器,否则可能会导致一些错误
// newCmd.Connection = conn;你不需要在上面的陈述中做到这一点
// newCmd.CommandType = CommandType.Text;没有必要,默认是
答案 2 :(得分:0)
Type initializer for [class name] threw an exception.
这表示在类的静态构造函数中引发了异常。您需要检查类DB_conection
的静态构造函数。它的代码将在您显示的代码中的静态方法调用GetConnection
之前执行。
如果在调试器中运行代码,我确信异常的来源是显而易见的。
答案 3 :(得分:0)
我不知道你是否已经解决了问题,但是如果 您编写的应用程序来自youtube用户教程,
问题在于您首先在http://www.youtube.com/watch?list=UL53a-mKN01jQ&v=53a-mKN01jQ&feature=player_detailpage#t=479s
写的app.confing xml删除<configSections></configSections>and leave <connectionStrings><add ..</connection Strings>
,它应该可以正常工作