2014-01-20 4 views
1

мне нужно, чтобы получить реальное имя столбца из DataTable, который я заполнил его FillSchema() метода, это запрос я использовал (SELECT ID AS [SNO],CATEG_NAME AS [Category] FROM Categories)Как получить реальное имя столбца псевдонима столбца

 var dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter("SELECT ID AS [SNO],CATEG_NAME AS [Category] FROM Categories",conn); 
     da.FillSchema(dt, SchemaType.Source); 
     dt.FillBySql(sql); 

Когда я проверяю dt.columns I что есть два столбца с тем же именем, что и в запросе. Что я могу сделать, чтобы получить реальный столбец names(id, categ_name)?

+0

Почему вы используете псевдонимы, если не хотите их? Было бы легко «SELECT * FROM Categories» получить все имена столбцов. Другой вариант - ExecuteReader (CommandBehavior.SchemaOnly)). http://stackoverflow.com/a/12161051/284240 Другой вариант - использовать таблицу 'INFORMATION_SCHEMA.COLUMNS' в базе данных. http://stackoverflow.com/a/600457/284240 –

+0

Я использовал псевдонимы для создания заголовка для каждого поля, показанного в виде сетки данных, а также для получения реальных имен столбцов, чтобы использовать их в другой важной задаче –

+0

, обратите внимание, что когда я использовал ExecuteReader (CommandBehavior.SchemaOnly), он возвратил таблицу схем, содержит все сведения о каждом столбце в указанном запросе, но, к сожалению, он не может идентифицировать столбцы с псевдонимом и дать мне ColumnName = SNO ,,, BaseColumnName = SNO ,,, IsAliased = –

ответ

0

Я считаю, что ваш лучший выбор - изменить их на C#, а не называть их в SQL. Это не самая лучшая практика, но это обходное решение сработало для меня.

На основе данных datagridview вы должны изменить базовый тип данных. Этот образец изменит имя столбца с «ID» на «SNO». Убедитесь, что вы скопировали таблицу, поэтому оригинал остается неизменным.

var dt = new DataTable(); 
SqlDataAdapter da = new SqlDataAdapter("SELECT ID,CATEG_NAME AS [Category] FROM Categories",conn); 
da.FillSchema(dt, SchemaType.Source); 

dt.FillBySql(sql); 
DataTable clonedWithColumnsChanged= dt.Copy(); 
clonedWithColumnsChanged.Columns["ID"].ColumnName = "SNO"; 
dgvReports.DataSource = clonedWithColumnsChanged; 
+0

это решение не решайте мою проблему, потому что я пытаюсь разработать пользовательский DataGridView, и моя цель - упростить все. В моем случае мне нужно извлечь настоящие имена столбцов для генерации запросов на ввод и обновление автоматически на основе извлеченных имен столбцов. –

+0

Вы можете вставлять вставки и Updates с хранимыми процедурами. http://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code – wruckie

Смежные вопросы