从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}'
,则抛出异常。
希望有人能理解我想说的话,并为我指明正确的方向。
只需替换"{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);