Адаптер данных SQL Server не заполняет данные - PullRequest
0 голосов
/ 18 февраля 2019

Я выполняю код для заполнения набора данных из таблицы 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.

Rows returned from executing script

Любые предложения или помощь будут высоко оценены.

С уважением, Даррен

...