我正在使用Dapper,我想从运行时提供的SQL语句中获取所有列名。从数据库返回的关系是否为空无关紧要。
public async Task<List<string>> GetColumnsFromSQLStatement(string sqlStatement)
{
List<string> Columns = new List<string>();
using (var con = SourceDatabaseConnectionFactory.GetConnection())
{
using (var dbTrans = SourceTransactionFactory.CreateTransaction(con, TransactionOptions.ReadOnly))
{
DynamicParameters para = new DynamicParameters();
var tmp = con.QueryAsync(sqlStatement, para, dbTrans, 100, CommandType.Text);
/*build the column string list?*/
dbTrans.Commit();
}
}
return Columns;
}
我希望我可以提供一个带有列名的字符串列表。
答案 0 :(得分:0)
使用非通用Query[Async]
API时,每一行都可以强制转换为IDictionary<string, object>
,从而可以访问名称。或者,使用返回数据读取器的API。
答案 1 :(得分:0)
我找到了一种解决方案,无需在sql语句的结果关系中获得任何记录即可获取列名:
public async Task<List<string>> GetColumnsFromSQLStatement(string sqlStatement)
{
List<string> Columns = new List<string>();
using (var con = SourceDatabaseConnectionFactory.GetConnection())
{
using (var dbTrans = SourceTransactionFactory.CreateTransaction(con, TransactionOptions.ReadOnly))
{
DynamicParameters para = new DynamicParameters();
var tmp = con.ExecuteReader(sqlStatement, para, dbTrans, 100, CommandType.Text);
var schema = tmp.GetSchemaTable();
for (var i = 0; i < schema.Rows.Count; i++)
{
Columns.Add(schema.Rows[i]["columnName"].ToString());
}
dbTrans.Commit();
}
}
return Columns;
}
因此,您可以使用例如存储的生产者和职能部门。