C# System.Data.SqlClient.SqlException:列名'conferID'无效

C# System.Data.SqlClient.SqlException:列名'conferID'无效,c#,sql-server,C#,Sql Server,我正在尝试从数据库中检索会议的特定日期以显示在网页上。阅读ConferenceID,如下所示: conferID = reader["ConferenceID"].ToString(); 我希望页面仅显示ConferenceID='3'中的日期,但当我从下面的代码中删除ConferenceID=ConferenceID时,我也从ConferenceID='1'和ConferenceID='2'中获取了日期。但是,如果我将ConferenceID=ConferenceID添加回代码,则页面将断开

我正在尝试从数据库中检索会议的特定日期以显示在网页上。阅读ConferenceID,如下所示:

conferID = reader["ConferenceID"].ToString();
我希望页面仅显示ConferenceID='3'中的日期,但当我从下面的代码中删除ConferenceID=ConferenceID时,我也从ConferenceID='1'和ConferenceID='2'中获取了日期。但是,如果我将ConferenceID=ConferenceID添加回代码,则页面将断开。如果我将这些代码放在SQL中进行测试,并将ConferenceID=ConferenceID更改为ConferenceID='3',它就起作用了。我现在迷路了。感谢您的帮助

SqlCommand GetDates = new SqlCommand(@"
WITH x AS (
             select MAX(ConferenceID) as ConferenceID, row_number() over(order by D.Dates) as SN, D.Dates 
             from Conference as T 
                  inner join master..spt_values as N 
                  on N.number between 0 and datediff(day, T.ConferenceBeginDate, T.ConferenceEndDate) 
                  cross apply (select dateadd(day, N.number, T.ConferenceBeginDate)) as D(Dates) 
                  where N.type ='P' AND (ConferenceID = conferID) group by ConferenceID, D.Dates
                  )
SELECT ConferenceID, SN, Dates
FROM x
WHERE SN <> (Select MAX(SN) from x) AND (ConferenceID = conferID)
GROUP BY ConferenceID, SN, Dates", conn);

您需要添加conferID作为参数。试试这个

SqlCommand GetDates = new SqlCommand(@"
WITH x AS (
             select MAX(ConferenceID) as ConferenceID, row_number() over(order by D.Dates) as SN, D.Dates 
             from Conference as T 
                  inner join master..spt_values as N 
                  on N.number between 0 and datediff(day, T.ConferenceBeginDate, T.ConferenceEndDate) 
                  cross apply (select dateadd(day, N.number, T.ConferenceBeginDate)) as D(Dates) 
                  where N.type ='P' AND (ConferenceID = @ConferenceID) group by ConferenceID, D.Dates
                  )
SELECT ConferenceID, SN, Dates
FROM x
WHERE SN <> (Select MAX(SN) from x) AND (ConferenceID = @ConferenceID)
GROUP BY ConferenceID, SN, Dates", conn);

GetDates.Parameters.Add(new SqlParameter("@ConferenceID", conferID));

请使用sql参数

SqlCommand GetDates = new SqlCommand(@"
WITH x AS (
             select MAX(ConferenceID) as ConferenceID, row_number() over(order by D.Dates) as SN, D.Dates 
             from Conference as T 
                  inner join master..spt_values as N 
                  on N.number between 0 and datediff(day, T.ConferenceBeginDate, T.ConferenceEndDate) 
                  cross apply (select dateadd(day, N.number, T.ConferenceBeginDate)) as D(Dates) 
                  where N.type ='P' AND (ConferenceID = @conferId) group by ConferenceID, D.Dates
                  )
SELECT ConferenceID, SN, Dates
FROM x
WHERE SN <> (Select MAX(SN) from x) AND (ConferenceID = @conferId)
GROUP BY ConferenceID, SN, Dates", conn);

GetDates.Parameters.AddWithValue("@conferId", conferId);

这里的问题是您试图引用一个不存在的字段。我假设您试图引用一个可用的字符串,因此必须将其作为命名参数添加,然后通过此参数分配。

添加参数是正确的,但我认为最后一条语句`GetDates.parameter…ConferenceID应该是@ConferenceID。我认为你的回答很有用。谢谢