关于这个简单的C#代码的NullReferenceException

时间:2010-08-24 13:28:05

标签: c# .net nullreferenceexception

编辑:给出异常的代码行是“foreach(table.Columns中的列列) “那是因为Table表对象为null。我如何加载Table对象?我的代码似乎是正确的方法,但它没有按预期工作。:D

我正在提取给定SQL表中所有列的列表,然后将它们加载到列表框中。这是代码:

public Dictionary<string,string> FindColumns(string tableName)
{
    using (var mySqlConnection = new SqlConnection(Properties.Settings.Default.ConnectionString))
    {
        var myConnection = new ServerConnection(mySqlConnection);
        var myServer = new Server(myConnection);
        var myDatabase = myServer.Databases["Shipments"];

        //Using a breakpoint I figured out that table is remaining null. That's
        //why I'm getting this error. How can I pull a table then?
        Table table = myDatabase.Tables[tableName];

        foreach (Column column in table.Columns)
        {
            Columns.Add(column.Name, column.DataType.ToString());
        }
    }

    return Columns;
}

我在上面的foreach循环中遇到错误。

这是我调用方法的地方:

private void lstTableNames_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (var column in db.FindColumns("Shipments"))
    {
        lstTableColumns.Items.Add(column.Key + "--" + column.Value);
    }
}

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

什么是ServerServerConnection?如果给定的表不存在,索引器通过Tables使用什么返回?

找出哪个变量为空(例如可能是table),然后你可以找出为什么它是空的。

答案 1 :(得分:1)

使用调试器,找出myDatabase.Tables中的内容。它是否有任何值?如果是这样,他们是什么?它是否包含一个“tableName”?

答案 2 :(得分:0)

运行代码的帐户(连接字符串中的帐户)是否至少具有对“货件”表的datareader访问权限?我假设“Shipments”是正确的表名,并且您的ServerConnection和Server对象已正确设置。

答案 3 :(得分:0)

运行该函数时,双重,三重和四重检查tableName参数中没有拼写错误。如果这是SMO,拼写错误的表将为您提供null结果。