数据库处理中的空引用异常

时间:2010-01-28 18:21:40

标签: c#

在胜利形式的c sharp中我遇到错误,类似于null引用异常 这是我的代码......而且我在数据库表中找不到任何条目......

public partial class Form1 : Form
{
    string strCon, strQry;
    SqlConnection con;
    SqlCommand cmd;
    int rowsaffected;

    public Form1()
    {
        InitializeComponent();
    }

    box s2 = new box();
    class box
    {
        protected string fname;
        protected string lname;
        public void name(string s1, string s2)
        {
            fname = s1;
            lname = s2;

        }
    }

    void func(string x, string y)
    {
        s2.name(x, y);
    }

    private void btnClick_Click(object sender, EventArgs e)
    {
        string first = txtFname.Text;
        string last = txtLname.Text;
        func(first, last);

        strQry = "Insert Into Practice Values(" + first + "," + last + " )";

        cmd = new SqlCommand(strQry, con);

        cmd.Connection.Open();

        rowsaffected = cmd.ExecuteNonQuery();

        cmd.Connection.Close();

        MessageBox.Show(+rowsaffected + "  row(s) affected"); 
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        strCon = " Data Source = (local); Initial Catalog = Student; User Id= sa; Password=sa;";
        con = new SqlConnection(strCon);
    }

alt text http://img682.imageshack.us/img682/6017/hjki.jpg

抱歉,我没有提到初始化它你的意思是说con = new SqlConnection(strCon);我已经在dat中完成了数据大小写错误是{“在此上下文中不允许使用名称'xyz'。此处只允许使用常量,表达式或变量。不允许使用列名。”}

7 个答案:

答案 0 :(得分:3)

您没有实例化con变量,例如:

SqlConnection con = new SqlConnection(connectionString);

答案 1 :(得分:2)

我认为错误发生是因为你使用了con,它没有被初始化。

我没有看到SqlConnection con = new SqlConnection(strCon);

答案 2 :(得分:2)

我打赌你的问题在于连接字符串,连接对象为null。以下是生成和测试连接字符串的快速方法:

  1. 右键单击Windows桌面或Windows资源管理器中的文件夹,
  2. 点击新建 - >文字文件
  3. 将新文件重命名为Test.udl(.udl代表通用数据链接)
  4. 使用UDL对话框创建并测试您的连接,然后单击确定
  5. 将Test.udl重命名为Test.txt并打开文本文件。
  6. 文本文件将包含您可以在代码中使用的有效连接字符串。

    另外供您参考,我已经简化了您的代码。以下应该更容易调试:

        private const string dbConnection = "USE THE UDL STRING HERE";
    
        private void btnClick_Click(object sender, EventArgs e)
        {
            string first = txtFname.Text;
            string last = txtLname.Text;
            //I think the orig code was missing the single quotes
            string query = string.Format("INSERT INTO Practice ('{0}','{1}')", first, last);
    
            int rowsAffected = 0;
    
            //Using statement will automatically close the connection for you
            //Using a const for connection string ensures .NET Connection Pooling
            using (SqlConnection conn = new SqlConnection(dbConnection))
            {
                //Creates a command associated with the SqlConnection
                SqlCommand cmd = conn.CreateCommand();
    
                //Set your sql statement
                cmd.CommandText = query;
    
                //open the connection
                cmd.Connection.Open();
    
                //Execute the connection
                rowsAffected = cmd.ExecuteNonQuery();
            }
            MessageBox.Show(rowsAffected + " rows Affected");
        }
    

答案 3 :(得分:0)

您是否正在设置连接字符串?您似乎正在访问Connection对象,而没有告诉它在何处插入数据。

cmd.Connection.ConnectionString =“some string”;

答案 4 :(得分:0)

我认为您不需要cmd.Connection.Opencmd.Connection.Close cmd将打开连接&关闭它,以执行查询/存储过程。

答案 5 :(得分:0)

您实际上是在正确创建连接。发生的事情是你看看你的连接字符串

strCon = " Data Source = (local); Initial Catalog = Student; User Id= sa; Password=sa;";

当它尝试连接时,将其读为:

资料来源:“(本地)” 初始目录:“学生” 用户ID =“sa” 密码 - “sa”

因此,等号后面的空格会传递给SQL服务器。你的字符串应该是什么样的

strCon =“Data Source =(local); Initial Catalog = Student; User Id = sa; Password = sa;”

我很确定你永远不会得到与你的数据库的实际连接,但它无声地失败。

答案 6 :(得分:0)

任何时候在有多个调用链接在一起的行上获得空引用,如:

    something.somethingElse.somethingElse

将它拆开并检查每一件。例如,在您的情况下,此代码:

    cmd = new SqlCommand(strQry, con);
    SqlConnection sc = cmd.Connection;
    System.Diagnostics.Debug.Assert(sc != null, "You got a null connection from the SqlCommand.");
    sc.Open();

可能会证明问题所在。