SQL Server DataAdapter未填充数据表

时间:2019-02-18 01:04:54

标签: sql visual-studio datatable sqldataadapter

我正在运行代码以填充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语句的listbox:部分。 SqlDataAdapter在交换机的单选按钮部分工作正常。

我不确定我缺少什么,因此我们将不胜感激。

我已经检查了SqlDataAdapter does not fill DataSetSqlDataAdapter not filling 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

任何建议或帮助将不胜感激。

关于, 达伦

0 个答案:

没有答案