Как подсчитать столбцы таблицы SQL Server 2008 с помощью C #?

Я разрабатываю приложение на C# в Visual Studio 2008. Я подключил к нему базу данных SQL Server 2008.

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

Я могу разобраться в столбцах, перейдя в базу данных, но я подключаю 4-5 таблиц в своих программах, поэтому я хочу знать, могу ли я считать столбцы.

Может ли кто-нибудь помочь мне в этом?

спасибо Shyam

1
Это аналогичный вопрос с ответом [CountOfColumns] [1] [1]: stackoverflow.com/questions/10699166/…
добавлено автор Taron Mehrabyan, источник
"Я хочу подсчитать количество столбцов, чтобы я мог обходить их, чтобы получить конкретные данные. Я думаю, что вы делаете что-то неправильно. Вы можете выбрать все столбцы, которые вам нужны за один шаг: SELECT T1Col1 = T1.col1, T2Col1 = T2.col1, col2, col3 От T1 INNER JOIN T2 ON T1.Col1 = T2.Col1 . Нет необходимости в цикле.
добавлено автор Tim Schmelter, источник
Добро пожаловать. Кроме того, поскольку вы новичок в StackOverflow, я хотел бы сообщить вам, что вы можете продвигать хорошие ответы и принимать ответ, который помог вам наиболее эффективно, установив отметку рядом с ответом. На этом сайте верхний или принятый ответ считается «спасибо».
добавлено автор Olivier Jacot-Descombes, источник
что ты уже испробовал? Вы можете получить список таблиц, столбцов и т. Д., Изучив каталог базы данных (например, sys.tables и sys.columns )), но похоже, что вы уже знаете, что , Неясно, в чем вопрос.
добавлено автор Yuck, источник
Как вы подключаетесь к БД? Linq2Sql, ADO.NET, EF?
добавлено автор Luis Filipe, источник
Спасибо, ребята, вы, ребята, очень полезны. Я многому научился.
добавлено автор shyam, источник

6 ответы

select count(*) from INFORMATION_SCHEMA.columns where TABLE_NAME = 'YourTableName'
4
добавлено
Это то, чего я хочу.
добавлено автор shyam, источник
Но как вы можете сохранить это число в одной переменной в C #?
добавлено автор shyam, источник
Большое вам спасибо за вашу помощь
добавлено автор shyam, источник

Что-то вроде этого ?

SELECT COUNT(*)
FROM sys.columns c 
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'yourTable'

См. эту страницу, предоставленную wy TaronPro , чтобы знать, как получить результат.

1
добавлено
Посмотрите, что предложил @TaronPro: stackoverflow.com/questions/10699166/…
добавлено автор xlecoustillier, источник
Или даже без соединения: FROM sys.columns WHERE [object_id] = OBJECT_ID ('dbo.yourTable');
добавлено автор Aaron Bertrand, источник
Спасибо за быстрые ответы. @Yuck вопрос, как я могу получить, что количество всех столбцов. Я использую SELECT COUNT (*) Из sys.columns, но он просто выбирает, что не дает мне этот номер. как я могу получить номер? Я новичок в SQL SERVER и C #.
добавлено автор shyam, источник
using (SqlConnection con = new SqlConnection (connectionString)) {con.Open (); используя (SqlCommand command = new SqlCommand («SELECT * FROM Status», con)), используя (SqlDataReader reader = command.ExecuteReader ()) {while (reader.Read ()) {Console.WriteLine (reader [0] .ToString ( ) + "\ т" + читатель [1] .ToStri & ZWNJ; нг() + "\ т" + читатель [2] & ZWNJ;. ToString() + "\ т" + чтения & ZWNJ; эр [3] .ToString ()); }}} Это мой код
добавлено автор shyam, источник
Это не я хотел, но все же я чему-то научился. Спасибо за вашу помощь
добавлено автор shyam, источник

Если вы используете объект SQLConnection для подключения к БД, используйте его метод GetSchema для получения списка всех столбцов без запроса.

    using (SqlConnection connection = new SqlConnection(connectionString))
   {
      //Connect to the database then retrieve the schema information.
       connection.Open();
       DataTable table = connection.GetSchema("Tables");
        ..
        ..
        ..

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

    string[] restrictions = new string[4];
    restrictions[1] = "dbo";
    DataTable table = connection.GetSchema("Tables", restrictions);

для получения дополнительной информации см. эту ссылку.

1
добавлено

Сам читатель дает вам количество столбцов. Это полезно, если вы не хотите знать номера строк определенной таблицы или представления, но из специального запроса.

Вы можете сбросить столбцы, подобные этому

string sql = "SELECT * FROM my query";
SqlCommand cmd = new SqlCommand(sql, connection);
using (SqlDataReader reader = cmd.ExecuteReader()) {
    while (reader.Read()) {
        for (int i = 0; i < reader.FieldCount; i++) {
            Console.WriteLine("{0} = {1}",
                              reader.GetName(i),
                              reader.IsDBNull(i) ? "NULL" : reader.GetValue(i));
        }
        Console.WriteLine("---------------");
    }
}
0
добавлено
огромное спасибо
добавлено автор shyam, источник

То, что я делал в аналогичной ситуации, заключается в том, что когда я выполнил запрос, я извлек все данные в DataSet.

Когда я получил DataSet, я открыл первую таблицу (ds.Tables [0]). Очевидно, вы сначала проверяете наличие.

Когда у вас есть таблица, то это так же просто, как выполнение

dt.Columns.Count;

В заключение DS.Tables [0] .Columns.Count Чтобы найти конкретный столбец по имени, вы проходите цикл и найдите тот, который

for (z=0; z < dt.Columns.Count; z++)
{
 //check to see if the column name is the required name passed in.
  if (dt.Columns[z].ColumnName == fieldName)
  {
   //If the column was found then retrieve it 
    //dc = dt.Columns[z];
   //and stop looking the rest of the columns
    requiredColumn = z;
    break;
 }

}

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

string return = dr.Field(requiredColumn);

Probalby не лучший способ сделать это, но он работает. Очевидно, что если данные, содержащиеся в поле, не являются строками, вам необходимо передать соответствующий тип ...

dr.Field(requiredColumn)
dr.Field(requiredColumn) 

и т.д

Rgds Джордж

0
добавлено
Большое вам спасибо за ваши быстрые ответы.
добавлено автор shyam, источник

вы можете использовать пространство имен Microsoft.SqlServer.Management.Smo , чтобы получить количество столбцов в указанной таблице следующим образом 1. добавьте DLL Microsoft.SqlServer.Management.Smo в свой проект и используйте пространство имен Microsoft.SqlServer.Management.Smo 2. написать следующий код

private int colCount()
{
      Server server=new Server(".\\SQLEXPRESS");
      Database database=Server.Databases["your database name"];
      Table table=database.Tables["your table name"];
      return (table.Columns.Count);
}
0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)