【发布时间】:2018-06-26 12:10:57
【问题描述】:
-你好,世界!-
我正在开发一个带有 ASP.NET 的 C# 项目,但遇到了障碍。该项目是从表中动态加载元数据和记录以对其进行编辑,而无需静态定义可以编辑哪些表。因此,我需要获取不同表的架构/元数据。
这是我目前所拥有的:
// initialize the connection
using (SqlConnection con = new SqlConnection(metadata.DatabaseString))
{
// open the connection
con.Open();
// initialize a new SqlCommand to get the schema
SqlCommand command = con.CreateCommand();
command.CommandType = CommandType.Text;
// 0 = 1 ensures it's always an empty data set
command.CommandText = "SELECT * FROM " + metadata.TableName + " WHERE 0=1;";
// set to SchemaOnly to improve performance (i think)
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SchemaOnly);
// GetSchemaTable() gets the table's metadata
DataTable dataTable = reader.GetSchemaTable();
// loops through all the rows of the data table
foreach (DataRow row in dataTable.Rows)
{
// field names found here: https://msdn.microsoft.com/en-us/library/system.data.datatablereader.getschematable(v=vs.110).aspx#Remarks
metadata.ColumnMetadata.Add(new ColumnWrapper()
{
ColumnType = GetTypeFromSql(row.Field<string>("DataTypeName")),
ColumnRawType = row.Field<string>("DataTypeName"),
ColumnName = row.Field<string>("ColumnName"),
ByteSize = row.Field<int>("ColumnSize"),
IsKey = row.Field<bool?>("IsKey") ?? false
});
}
}
问题是 IsKey 字段始终为空。我的 SQL Server 表是使用以下查询创建的:
CREATE TABLE [dbo].[Dtm_LKUP_Role] (
[DtmRoleId] INT IDENTITY (1, 1) NOT NULL,
[RoleName] VARCHAR(32) NOT NULL,
[IsActive] BIT DEFAULT ((1)) NOT NULL,
PRIMARY KEY CLUSTERED ([DtmRoleId] ASC)
);
这是我迄今为止尝试过的:
- 使用不同的表格,结果相同
- 访问
dataTable.Columns["IsKey"]
无论我在哪里寻找我都找不到我需要的信息。有没有人对可能导致这种情况的原因有任何想法?如果相关,我将使用 MDF 文件和 LocalDB 进行数据库连接,而不是实时服务器。
【问题讨论】:
标签: c# sql asp.net sql-server asp.net-mvc