- Привет, Мир! -
Я работаю над C # с проектом ASP.NET и столкнулся с проблемой. Проект состоит в том, чтобы динамически загружать метаданные и записи из таблиц для их редактирования без статического определения того, какие таблицы можно редактировать. Поэтому мне нужно получить схему / метаданные разных таблиц.
Вот что у меня есть:
// 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 для подключения к базе данных, а не живой сервер.