2016-05-24 30 views
1

有人可以建议如何获取ASP.NET Core 1 RC2中的模式吗?ASP.NET Core 1 RC2 - 数据库模式

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

     } 

回答

2

connection.GetSchema已Asp.Net核心折旧完毕,由于它返回它也已经贬值了DataTable 。现在执行此操作的方法是打开运行ExecuteReader()函数,然后使用生成的读取器对象中的GetSchemaColumn()函数。

这里有一个例子:

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(); 
    } 

注:我认为这仍然是RC2中被stabalized。例如column.IsKey函数总是返回null。

+0

摆弄.net核心1.1。我仍然可以看到Reader.GetSchemaTable(),我看不到Reader.GetColumnSchema()。不知道这个故事是什么? – bbsimonbb

+0

你好。我刚刚创建了一个新的控制台应用程序,以.netcoreapp 1.1为目标,添加System.Data.SqlClient 4.3,并粘贴代码,并且它仍然有效。所以我不确定为什么你看不到GetSchemaTable()。 –

+0

是的,我可以看到它,但GetSchemaTable()返回没有属性或方法的[DataTable](https://docs.microsoft.com/en-us/dotnet/core/api/system.data.datatable)? – bbsimonbb

0

如果从数据库所需要的所有表名我成功地做到这一点:

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; 
} 
相关问题