C#-DataTable遍历的方式

https://www.cnblogs.com/soany/p/5297400.html

DataTable dt = dataSet.Tables[0];   
for(int i = 0 ; i < dt.Rows.Count ; i++)   
{   
   string strName = dt.Rows[i]["字段名"].ToString();   
}
foreach(DataRow myRow in myDataSet.Tables["temp"].Rows)   
{   
      var str = myRow[0].ToString();   
}
foeach(DataRow dr in dt.Rows)      
{      
     object value = dr["ColumnsName"];      
}
DataTable dt=new DataTable();      
foreach(DataRow dr in dt.Rows)      
{    
   for(int i=0;i<dt.Columns.Count;i++)    
   {    
        dr[i];    
   }      
}   

C# 如何获取SQL Server | SQLite中指定数据表的所有字段名和字段类型

我们继续研究SqlConnection.GetSchema 方法,
看看如何获取指定数据表的所有字段名和字段类型
SqlConnection.GetSchema方法有2个重载形式,
获取指定数据表的所有字段名和字段类型的秘密就在
GetSchema (String, String[])的第二个参数中。

public override DataTable GetSchema(
    string collectionName,
    string[] restrictionValues
)

参数collectionName指定要返回的架构的名称,取值为静态类 SqlClientMetaDataCollectionNames的成员,
如果要取列信息,则取值为SqlClientMetaDataCollectionNames.Columns。

关于SqlClientMetaDataCollectionNames类成员的详细信息参见

https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqlclientmetadatacollectionnames?redirectedfrom=MSDN&view=dotnet-plat-ext-3.1#fields

参数restrictionValues为请求架构的一组限制值,对于不同的架构集类型,有不同的写法。要具体了解,可以调用GetSchema(“Restrictions”) 方法。

针对SQL Server 数据库,restrictionValues的长度为4,其中
restrictionValues[0]为Catalog(数据库名),
restrictionValues[1]为Owner(所有者),
restrictionValues[2]为Table(表名),
restrictionValues[3]为Column(列名)。

我们要查询某张表中的列名等信息,则可以通过设置restrictionValues[2]=”SomeTableName”来实现。

实现代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace scratchline.cn
{
    public struct Field
    {
        public string Name;
        public string Type;
    }

    public class scratchline
    {
        public List<Field>GetFileds(string connectionString, string tableName)
        {
            List<Field> _Fields = new List<Field>();
            SqlConnection _Connection = new SqlConnection(connectionString);
            try
            {
                _Connection.Open();

                string[] restrictionValues = new string[4];
                restrictionValues[0] = null; // Catalog
                restrictionValues[1] = null; // Owner
                restrictionValues[2] = tableName; // Table
                restrictionValues[3] = null; // Column

                using (DataTable dt = _Connection.GetSchema(SqlClientMetaDataCollectionNames.Columns, restrictionValues))
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        Field field;
                        field.Name = dr["column_name"].ToString();
                        field.Type = dr["data_type"].ToString();
                        _Fields.Add(field);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _Connection.Dispose();
            }

            return _Fields;
        }
    }
}

总结:SqlConnection.GetSchema方法用于获取数据库架构信息,通过不同参数的组合可实现各种数据架构信息的获取功能。

https://www.cnblogs.com/two/p/5224656.html

https://www.cnblogs.com/GmrBrian/p/6214756.html

C#-如何确定SQL Server 中数据表是否存在

SQL Server数据库的表名等信息属于架构集合的一部分,
ADO.NET中的SqlConnection类包含的 GetSchema 方法用于获取支持的架构集合列表,
因此,要确定SQL Server 数据库中表是否存在是否存在,
可通过SqlConnection.GetSchema(“Tables”)来获得,
该方法返回一个DataTable,
DataTable中包含table_catalog、table_schema、table_name、table_type等4列,table_name列即为数据表名。

示例代码如下

/// <summary> /// 判断数据库中名为tableName的表是否存在
        /// </summary>
        /// <param name="tableName">要查询的表名</param>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <returns></returns>
        public bool Exist(string tableName, string connectionString)
        {
            bool bExist = false;
            SqlConnection _Connection = new SqlConnection(connectionString);
            try
            {
                _Connection.Open();
                using (DataTable dt = _Connection.GetSchema("Tables"))
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (string.Equals(tableName, dr[2].ToString()))
                        {
                            bExist = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _Connection.Dispose();
            }

            return bExist;
        }

要了解更多关于SQL Server架构集合的信息,可参看官方文档

https://www.cnblogs.com/two/p/5223650.html