Я выполняю код для заполнения набора данных из таблицы SQL Server, но по какой-то причине он не заполняет таблицу данных.Я запустил хранимую процедуру со значениями при пошаговом выполнении кода, и он возвращает строки.Я проверил через SQL Server Profiler, какая команда выполняется, а затем выполнил ту же команду через SQL Server Management Studio, и он возвращает строки, но по какой-то причине в Visual Studio он не возвращает строк, но не возвращает никаких исключений.
Код:
try
{
using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["Intranet"].ConnectionString))
{
switch (command)
{
case "radiobutton":
string school = ParameterString[0];
using (SqlDataAdapter da = new SqlDataAdapter(GET_TEMPLATE_NAMES, cnn))
{
DataTable dt = new DataTable();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@TemplateforSchool", school);
cnn.Open();
da.Fill(dt);
lstTemplates.DataSource = dt;
lstTemplates.DataBind();
}
break;
case "listbox": // If the listbox triggers the callback then update the grid
switch (radSchools.SelectedItem.Text)
{
case "Junior School":
StartYear = 1;
EndYear = 5;
break;
case "Middle School":
StartYear = 6;
EndYear = 8;
break;
case "Senior School":
StartYear = 9;
EndYear = 12;
break;
}
string TemplateName = ParameterString[0];
int DetentionCount = Convert.ToInt16(ParameterString[1]);
string DetentionType = ParameterString[2];
using (SqlDataAdapter da = new SqlDataAdapter(GET_CAREGIVER_EMAIL_LIST, cnn))
{
DataTable dt = new DataTable();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter
{
ParameterName = "@DetentionType",
SqlDbType = SqlDbType.VarChar,
Value= DetentionType
});
da.SelectCommand.Parameters.Add(new SqlParameter
{
ParameterName="@DetentionCounter",
SqlDbType=SqlDbType.Int,
Value=DetentionCount
});
da.SelectCommand.Parameters.Add(new SqlParameter
{
ParameterName = "@StartYear",
SqlDbType = SqlDbType.Int,
Value = StartYear
});
da.SelectCommand.Parameters.Add(new SqlParameter
{
ParameterName = "@EndYear",
SqlDbType = SqlDbType.Int,
Value = EndYear
});
cnn.Open();
da.Fill(dt);
gdvCaregiverEmailList.DataSource = dt;
gdvCaregiverEmailList.DataBind();
}
break;
}
}
}
catch(Exception ex)
{
}
Проблема в списке: раздел оператора switch
.SqlDataAdapter
отлично работает в секции переключателей.
Я не уверен, что мне не хватает, поэтому любая помощь будет высоко ценится.
Я проверил SqlDataAdapterне заполняет DataSet , а также SqlDataAdapter, не заполняющий DataTable , но первый не имеет отношения к моей ситуации, а второй не имеет принятого ответа, который я смог найти.
SQL Server сохраненПроцедура, которую я вызываю:
ALTER PROCEDURE [dbo].[GetCaregiverEmailList]
@DetentionType CHAR(2),
@DetentionCounter INT,
@StartYear INT,
@EndYear INT
AS
BEGIN
SELECT DISTINCT
sdc.StudentCode, s.Student#, s.GIVEN_NAME, s.SURNAME,
sdc.DetentionCount, sdc.DetentionType,
s.GIVEN_NAME + ' ' + s.SURNAME AS FullName,
LTRIM(s.CURRENT_YEAR) AS CurrentYear,
i.EMAIL_HOME, RTRIM(i.SALUTATION) AS EmailTitle,
ax.CORR_PREFERENCE, ar.CAREGIVER_NO
FROM
StudentDetentionCounter sdc
LEFT JOIN
[PCSchool].[dbo].[Student] s ON sdc.StudentCode = s.STUDENT#
INNER JOIN
[PCSchool].[dbo].[ALUMREL] ar ON sdc.StudentCode = ar.CHILD#
LEFT JOIN
[PCSchool].[dbo].[IDENTITY] i ON ar.PARENT# = i.[MEMBER#]
LEFT JOIN
[PCSchool].[dbo].[ALUMREL_EX] ax ON ar.parent# = ax.PARENT#
WHERE
(ar.PARENT# <> ar.FAMILY_HASH)
AND ar.EN_EMAIL IN ('I','A')
AND (ax.CORR_PREFERENCE = 1)
AND (sdc.DetentionCount = @DetentionCounter
AND sdc.DetentionType = @DetentionType)
AND (CONVERT(INT, (LTRIM(s.CURRENT_YEAR))) BETWEEN @StartYear AND @EndYear)
ORDER BY
s.SURNAME
END
Команда, которая выполняется, когда я смотрю на SQL Server Profiler:
exec GetCaregiverEmailList @DetentionType='LT',@DetentionCounter=3,@StartYear=9,@EndYear=12
И следующие строки возвращаются, если я выполняюхранимую процедуру вручную или запустив указанную выше команду exec.
Любые предложения или помощь будут высоко оценены.
С уважением, Даррен