1

我正在 Visual Studio 2008 中用 C# 开发一个应用程序。我用它连接了一个 SQL Server 2008 数据库。

我想计算列数,以便我可以循环它们以获取特定数据。

我可以通过访问数据库来计算列,但是我在我的程序中加入了 4-5 个表,所以我想知道我是否可以计算列。

任何人都可以帮助我吗?

谢谢你

4

6 回答 6

4
select count(*) from INFORMATION_SCHEMA.columns where TABLE_NAME = 'YourTableName'
于 2013-02-07T14:30:18.993 回答
1

像这样的东西?

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

请参阅TaronPro 提供的此页面以了解如何检索结果。

于 2013-02-07T14:27:10.203 回答
1

如果您使用 SQLConnection 对象连接到 DB,请使用其 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);

有关更多信息,请参阅链接。

于 2013-02-07T15:02:49.990 回答
0

我在类似情况下所做的是,当我执行查询时,我将所有数据检索到 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<string>(requiredColumn);

Probalby 不是最好的方法,但它确实有效。显然,如果字段中包含的数据不是字符串,那么您需要传递适当的类型......

dr.Field<decimal>(requiredColumn)
dr.Field<int>(requiredColumn) 

ETC

乔治

于 2013-02-07T14:27:54.447 回答
0

阅读器本身会为您提供列数。当您不想知道特定表或视图的行数而是从临时查询中知道时,这很有用。

您可以像这样转储列

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("---------------");
    }
}
于 2013-02-07T14:44:35.923 回答
0

您可以使用Microsoft.SqlServer.Management.Smo命名空间来获取指定表中的列数,如下所示 1 。在您的项目中添加 Microsoft.SqlServer.Management.Smo dll 并使用命名空间 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);
}
于 2013-02-07T14:51:53.833 回答