У меня есть хранимая процедура, которая вызывается сотни раз в минуту. Время от времени я получаю исключение, что в запросе отсутствует столбец. Вот исключение:
System.Web.HttpUnhandledException: было сгенерировано исключение типа 'System.Web.HttpUnhandledException'. ---> System.ArgumentException: столбец SubjectID не принадлежит таблице.
[ArgumentException: столбец SubjectID не принадлежит таблице.]
System.Data.DataRow.GetDataColumn (String columnName) +1775157
System.Data.DataRow.get_Item (String columnName) +13
System.Data.DataTableReader.get_Item (имя строки) + 66
Вот C #, который вызывает сохраненный процесс:
DataTableReader dtr;
dtr = Util.getDepartmentsByTerm(term);
ddlSubject.Items.Add(new ListItem("Select A Subject...", ""));
while (dtr.Read())
{
//The following line throws the exception!
var value = (string)dtr["SubjectID"];
var text = (string)dtr["title"];
var count = (int) dtr["Count"];
//if (!text.Contains("(0)"))
if(count > 0)
ddlSubject.Items.Add(new ListItem(text, value));
}
Довольно просто ... вот хранимая процедура:
ALTER PROCEDURE [dbo].[selectDepartmentsByTerm]
(
@term nvarchar(50),
@version int
)
AS
SELECT SubjectID, Subject as Title,(select count(distinct courseno)
from RegistrationBlock WITH (NOLOCK)
where RegistrationBlock.Subject = Subjects.SubjectID
and RegistrationBlock.version = @version
and (@term = '' OR RegistrationBlock.term = @term)) as "Count"
FROM Subjects WITH (NOLOCK)
where Version = @version
order by subject
GO