从c#连接到SQL Server的异常

时间:2012-09-16 16:02:59

标签: c# sql-server exception-handling ado.net

我正在使用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 个答案:

答案 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>,它应该可以正常工作