我遇到一个问题,我在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)
删除{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被解释为标识符而不是文本。您也可以省略方括号,但这可能会导致列名中的特殊字符出现问题。