0

我正在使用 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();
        }
    }
}
4

4 回答 4

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
}
于 2012-09-16T16:09:35.517 回答
0

我不知道你现在是否已经解决了这个问题,但如果你写的应用程序来自 youtube 用户教程,

问题出在您最初编写的 app.confing xml http://www.youtube.com/watch?list=UL53a-mKN01jQ&v=53a-mKN01jQ&feature=player_detailpage#t=479s

删除<configSections></configSections>and leave <connectionStrings><add ..</connection Strings>它应该可以工作

于 2012-10-06T19:56:27.733 回答
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; 不需要,默认

于 2012-09-16T16:28:47.407 回答
0

Type initializer for [class name] threw an exception.

这表明在类的静态构造函数中引发了异常。您需要检查 class 的静态构造函数DB_conection。它的代码将在GetConnection您显示的代码中的静态方法调用之前执行。

如果您在调试器中运行代码,我确信异常的来源将是显而易见的。

于 2012-09-16T16:34:51.913 回答