您的問題是由於在發出命令之前應該打開一個連接而造成的。你的第二個例子應該上班,如果你只想補充一點,缺少cn.Open
Using cn As New MySqlConnection(cs)
Dim restrictions(4) As String
restrictions(2) = tblName
cn.Open()
Dim dbTbl As DataTable = cn.GetSchema("Tables", restrictions)
If dbTbl.Rows.Count = 0 Then
Return False
Else
Return True
End If
End Using
而且,也沒有必要關閉和處置的連接,這將在End Using
語句自動完成。當然,試圖發現表是否存在捕獲異常的第一種方法是完全錯誤的(性能,由異常驅動的代碼和其他類型的異常),因此不應該採取任何考慮。
有在使用的getSchema調用的代碼一個令人困惑的問題:
約一個空引用異常消息會談,但顯然也有在該代碼沒有空的對象,因爲GetSchema
應該也返回初始化DataTable
的情況下,沒有找到匹配。
但是,如果你省略了cn.Open,你會得到NRE。
那麼NRE從哪裏來呢?
望着的MySqlConnection的反編譯的代碼,調用的getSchema是這樣的
public override DataTable GetSchema(string collectionName, string[] restrictionValues)
{
string[] strArray;
MySqlSchemaCollection schemas;
if (collectionName != null)
{
goto Label_000A;
}
collectionName = SchemaProvider.MetaCollection;
Label_000A:
strArray = this.schemaProvider.CleanRestrictions(restrictionValues);
return this.schemaProvider.GetSchema(collectionName, strArray).AsDataTable();
}
和this.schemaProvider.GetSchema(....)
調用的代碼如下
public virtual MySqlSchemaCollection GetSchema(string collection, string[] restrictions)
{
MySqlSchemaCollection schemas;
if (this.connection.State == 1)
{
goto Label_0019;
}
throw new MySqlException("GetSchema can only be called on an open connection.");
Label_0019:
collection = StringUtility.ToUpperInvariant(collection);
schemas = this.GetSchemaInternal(collection, restrictions);
if (schemas != null)
{
goto Label_0038;
}
throw new ArgumentException("Invalid collection name");
Label_0038:
return schemas;
}
因此,這讓只有一種可能。 schemaProvider
變量未初始化。搜索MySqlConnection
的Open
方法我能找到的初始化schemaProvider變量
public override void Open()
{
... lot of code omitted .....
Label_01F3:
this.schemaProvider = new ISSchemaProvider(this);
this.perfMonitor = new PerformanceMonitor(this);
if ((Transaction.Current != null) == null)
{
goto Label_0230;
}
if (this.Settings.AutoEnlist == null)
{
goto Label_0230;
}
this.EnlistTransaction(Transaction.Current);
Label_0230:
this.hasBeenOpen = 1;
this.SetState(1, 1);
return;
}
所以這是可能的,這是某種類型的錯誤行?
我會讓答案更專家在此。
我沒有看到你在哪裏打開連接。另外,你在哪裏得到參考錯誤?哪條線? – siride
連接好,不用擔心,異常是** dim dbtbl as datatable .....** – jearca
將鼠標懸停在不同的對象變量上,看看哪個是'Nothing' – Plutonix