Определение имени столбца идентификатора SQL Server в .NET.

Я пытаюсь написать некоторый общий код в VB.NET, который определяет, содержит ли таблица базы данных SQL-сервера столбец идентификатора, и, если это так, вернуть имя этого столбца.

Я работаю в Visual Basic 2008 Express и создал базу данных SQL «MyDatabase» с 1 таблицей «MyTable». Внутри этой таблицы у меня есть 3 столбца: «ID», «Column1» и «Column2». Я знаю, я знаю … изобретательные имена. В свойствах столбца в Проводнике базы данных я установил столбец «Идентификатор» «Спецификация идентификации» на «Да» и установил значение «Идентификация» «Да».

Мне нужно, чтобы код .NET возвращал «ID» в качестве столбца идентификации. Можно ли это сделать через LINQ или какие-то другие средства?

Большое спасибо заранее!

везение

Используйте SQLDataReader для открытия MyTable (SELECT ID из myTable WHERE 1 = 2) и используйте метод GetSchemaTable, который даст вам данные.

В соответствии с документами проверьте содержимое столбца с именем IsAutoIncrement. Если он возвращает true, это должен быть столбец Identity.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getschematable.aspx

Примечание. Это чисто основано на моей памяти и помощи из документов MSDN.

Если у вас есть Linq to SQL DataContext, вы можете получить метаданные таблицы, запросив контекст данных MappingSource :

var ctx = new YourDataContext(); var identityAndKey = ctx.Mapping.MappingSource .GetModel(typeof(YourDataContext)) .GetMetaType(typeof(YourTable)) .DataMembers .SingleOrDefault(i => i.IsDbGenerated && i.IsPrimaryKey); 

Вы получите экземпляр MetaDataMember , который является свойством Primary Key и DbGenerated (Identity) вашего класса данных. Имя столбца доступно в свойстве Name .

С небольшим отражением вы сможете повторно использовать этот код для любого контекста таблицы / данных.

Вы можете вызвать хранимую процедуру sp_columns для получения этой информации и более:

 SqlConnection sqlConx = new SqlConnection(p_conectionStrWithDB); sqlConx.Open(); SqlCommand cmd = new SqlCommand("sp_columns", sqlConx); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@table_name", TableName)); DataTable tblColumns = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(tblColumns); 

Изменить: вы также можете получить информацию о первичных ключах следующим образом:

 SqlConnection sqlConx = new SqlConnection(p_conectionStrWithDB); sqlConx.Open(); SqlCommand cmd = new SqlCommand("sp_pkeys", sqlConx); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@table_name", tableName)); DataTable tblConstraints = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(tblConstraints); return tblConstraints; 
  • VB.Net: кавычки Escape синглов в строке запроса, которая использует переменную с одинарными кавычками
  • Ошибка: строковые или двоичные данные будут усечены. Заявление было прекращено
  • SQL-запрос возвращает 0 для datagridview
  • В режиме отладки я могу заставить отладчик сломаться (т. Е.: Пауза), когда часть кода C # / VB.NET выполняет SQL Insert?
  • DateDiff каждые 3 дня
  • дата не сравнивается в SQL Server 2000
  • Ошибка преобразования nvarchar в числовой
  • Попытка извлечь изображение из SQL Server в .NET, получив UnauthorizedAccessException
  • Какие предпосылки для Crystal Reports 2008 и .mdf файл
  • Лучшая pratice для отправки веб-формы asp.net в автозаполнение JQuery
  • Ошибка удаленного подключения SQL Server
  • Interesting Posts

    не может получить точный десятичный процентный результат?

    Выберите Top 5 записей каждого сотрудника в SQL Server

    Заявления DDL не реплицируются на SQL

    Не удается найти файл microsoft.sqlserver.batchparser.dll

    Каков наилучший тип столбца для URL?

    Экспорт базы данных SQL Server для доступа с использованием структуры сущностей

    Изменить текущий путь к базе данных в SQL Server

    Группировать все связанные записи во многих отношениях, компоненты, связанные с графиком SQL

    Совокупная сумма

    Каков наилучший способ создания и управления глобальными Procs и UDF в SQL Server?

    Как сделать поиск с учетом регистра в предложении WHERE (я использую SQL Server)?

    Таблицы объединяются для получения результата

    Рефакторинг – две ужасные линии

    Как выполнить простое сопоставление строк как часть выбора t-sql?

    Функция OpenXml в хранимой процедуре не будет вставлять значения в заданный порядок в таблицу

    Давайте будем гением компьютера.