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

时间:2016-01-02 13:58:42

标签: c# sql information-schema

我遇到一个问题,我在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}'抛出异常。

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

2 个答案:

答案 0 :(得分:0)

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

"{0}"

所以:

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

答案 1 :(得分:0)

使用quared括号 [{0}]

替换' {0}' ...周围的单引号

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

这样,sColumnName被解释为标识符而不是文本。您也可以省略方括号,但这可能会导致列名中的特殊字符出现问题。