从Information.schema列返回列名,然后使用该列在中查找数据

本文关键字:查找 数据 然后 schema Information 返回 | 更新日期: 2023-09-27 18:28:39

我有一个问题,我从INFORMATION_SCHEMA.columns 中找到列名

daISC = new SqlDataAdapter(
    string.Format(
        "SELECT column_name FROM INFORMATION_SCHEMA.columns WHERE table_name = 'DynamicDataSubjects' AND ordinal_position = 20"
    ), cn);

然后我想使用colum_name来查找中的数据值

string sColumnName = row2["column_name"].ToString();
daDDS = new SqlDataAdapter(
    string.Format(
        "SELECT '{0}' FROM DynamicDataSubjects WHERE pupil_id = {1} AND interim_id = {2}",
        sColumnName, iPupilID, iInterimID
    ), cn);

不幸的是,这会引发一个错误,因为sColumnName被视为文本并返回自身。如果没有'{0}',则抛出异常。

希望有人能理解我想说的话,并为我指明正确的方向。

从Information.schema列返回列名,然后使用该列在中查找数据

只需替换"{0}"周围的单引号。。。带方括号[{0}]

daDDS=新的SqlDataAdapter(string.Format("SELECT[{0}]FROM DynamicDataSubjects WHERE pupil_id={1}AND interm_id={2}",sColumnName,iPupilID,iInterimID),cn);

通过这种方式,sColumnName被解释为标识符,而不是文本。您也可以省略方括号,但这可能会留下列名中特殊字符的问题。

去掉{0}周围的单引号,它应该可以工作了。SQL将单引号内的字符视为字符串文字。为了确保列名被正确地分隔,即如果它包含空格,用双引号将其括起来,例如

"{0}"

因此:

daDDS = new SqlDataAdapter(string.Format("SELECT '"{0}'" FROM DynamicDataSubjects WHERE pupil_id = {1} AND interim_id = {2}", sColumnName, iPupilID, iInterimID), cn);