2016-05-24 15 views
1

Kann jemand beraten, wie Sie das Schema in ASP.NET Core 1 RC2 erhalten?ASP.NET Core 1 RC2 - Datenbankschema

using (SqlConnection connection = new SqlConnection("Server=.;Database=Mydb;Trusted_Connection=True;MultipleActiveResultSets=true")) 
     { 
      connection.Open(); 
      connection.GetSchema("Tables"); // doesn't work 

     } 

Antwort

2

Die connection.GetSchema wurde in Asp.Net Kern abgeschrieben wegen, da sie die DataTable kehrt die ebenfalls abgeschrieben wurde . Der Weg, dies jetzt zu tun, ist zu öffnen, führen Sie die ExecuteReader() Funktion, und verwenden Sie dann die GetSchemaColumn() Funktion aus dem resultierenden Reader-Objekt. Hier

ist ein Beispiel:

public static void Main(string[] args) 
    { 
      using (SqlConnection connection = new SqlConnection("Server=(localdb)\\v11.0;Database=MyAdventureWorks;Trusted_Connection=True")) 
      { 

       connection.Open(); 

       SqlCommand cmd = new SqlCommand("select * from [Person].[Person]", connection); 
       DbDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SchemaOnly); 

       if (reader.CanGetColumnSchema()) 
       { 
        var columns = reader.GetColumnSchema(); 
        foreach (var column in columns) 
        { 
         Console.Write("ColumName: " + column.ColumnName); 
         Console.Write(", DataTypeName: " + column.DataTypeName); 
         Console.Write(", ColumnSize: " + column.ColumnSize); 
         Console.WriteLine(", IsUnique: " + column.IsUnique); 
        } 
       } 
       else 
        throw new Exception("Connection does not support GetColumnSchema."); 
      } 

      Console.ReadLine(); 
    } 

Anmerkung: Ich denke, das ist immer noch in Rc2 stabalized werden. Zum Beispiel gibt die Funktion column.IsKey immer null zurück.

+0

Fiedeln mit .net-Kern 1.1. Ich kann Reader.GetSchemaTable() immer noch sehen, und ich kann Reader.GetColumnSchema() nicht sehen. Frage mich, was die Geschichte ist? – bbsimonbb

+0

Hallo dort. Ich habe gerade eine neue Konsolen-App erstellt, die auf .netcoreapp 1.1 abzielt, System.Data.SqlClient 4.3 hinzufügt und den Code einfügt, und es funktioniert weiterhin. Ich bin mir also nicht sicher, warum Sie die GetSchemaTable() nicht sehen können. –

+0

Yup ich kann es sehen, aber GetSchemaTable() gibt eine [DataTable] (https://docs.microsoft.com/en-us/dotnet/core/api/system.data.datatable) zurück, die keine Eigenschaften oder Methoden hat? – bbsimonbb

0

Wenn Sie alle Tabellennamen aus einer Datenbank benötigen habe ich es geschafft, dies zu tun:

public List<string> getTables() 
{ 
    List<string> result = new List<string>(); 
    using (SqlConnection connection = new SqlConnection(appSettings.ConnectionStringSamples)) 
    { 
     connection.Open(); 
     using (SqlCommand command = new SqlCommand("SELECT name FROM sys.Tables;", connection)) 
     using (SqlDataReader reader = command.ExecuteReader()) 
     while (reader.Read()) result.Add(reader["name"].ToString()); 
    } 

    return result; 
} 
Verwandte Themen