需要在.net中使用数据库表模式获取空数据表

Ron*_*rby 18 .net c# sql-server datatable ado.net

使用sql server表的模式创建Empty DataTable对象的最佳方法是什么?

Ric*_*d R 16

所有这些解决方案都是正确的,但是如果您想要为此方案简化的纯代码解决方案.

由于在ExecuteReader函数上指定了CommandBehavior.SchemaOnly,因此在此解决方案中不返回任何数据(命令行为文档)

CommandBehavior.SchemaOnly解决方案将添加SET FMTONLY ON; 在为您执行查询之前执行sql,这样可以保持代码清洁.

public static DataTable GetDataTableSchemaFromTable(string tableName, SqlConnection sqlConn, SqlTransaction transaction)
{
    DataTable dtResult = new DataTable();

    using (SqlCommand command = sqlConn.CreateCommand())
    {
        command.CommandText = String.Format("SELECT TOP 1 * FROM {0}", tableName);
        command.CommandType = CommandType.Text;
        if (transaction != null)
        {
            command.Transaction = transaction;
        }

        SqlDataReader reader = command.ExecuteReader(CommandBehavior.SchemaOnly);

        dtResult.Load(reader);

    }

    return dtResult;
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 10

我认为值得一提的一个声明是SET FMTONLY:

SET FMTONLY ON;
SELECT * FROM SomeTable
SET FMTONLY OFF;
Run Code Online (Sandbox Code Playgroud)

由于SET FMTONLY打开时的请求,不会处理任何行或将其发送到客户端.

这可能很方便的原因是因为您可以提供任何查询/存储过程并仅返回结果集的元数据.


Sho*_*ikh 9

尝试: SELECT TOP 0 * FROM [TableName]

并使用SQLDataAdapter填充DataSet,然后从该DataSet中获取Table.