编辑:给出异常的代码行是“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);
}
}
感谢您的帮助!
答案 0 :(得分:3)
什么是Server
和ServerConnection
?如果给定的表不存在,索引器通过Tables
使用什么返回?
找出哪个变量为空(例如可能是table
),然后你可以找出为什么它是空的。
答案 1 :(得分:1)
使用调试器,找出myDatabase.Tables中的内容。它是否有任何值?如果是这样,他们是什么?它是否包含一个“tableName”?
答案 2 :(得分:0)
运行代码的帐户(连接字符串中的帐户)是否至少具有对“货件”表的datareader访问权限?我假设“Shipments”是正确的表名,并且您的ServerConnection和Server对象已正确设置。
答案 3 :(得分:0)
运行该函数时,双重,三重和四重检查tableName
参数中没有拼写错误。如果这是SMO,拼写错误的表将为您提供null结果。