Набор данных, возвращающий нулевые результаты - PullRequest
0 голосов
/ 27 мая 2009

Я пытаюсь заполнить поле со списком в моем приложении winform из базы данных. Я знаю, что есть информация в БД. Я знаю, что SP работает. Возвращает правильные имена столбцов. Но сам DataSet пуст? Помогите!?!?

Позвоните из моей формы ->

cboDiagnosisDescription.Properties.DataSource = myDiagnosis.RetrieveDiagnosisCodes();

Коды RetrieveDiagnosis ->

public DataSet RetrieveDiagnosisCodes()
    {
        string tableName = "tblDiagnosisCues";
        string strSQL = null;
        DataSet ds = new DataSet(tableName);
        SqlConnection cnn = new SqlConnection(Settings.Default.CMOSQLConn);
        //strSQL = "select * from " & tableName & " where effectivedate <= getdate() and (termdate >= getdate() or termdate is null)"
        strSQL = "select tblDiagnosisCues.*, tblDiagnosisCategory.Description as CategoryDesc, tblDiagnosisSubCategory.Description as SubCategoryDesc " + "FROM dbo.tblDiagnosisCategory INNER JOIN " + "dbo.tblDiagnosisSubCategory ON dbo.tblDiagnosisCategory.Category = dbo.tblDiagnosisSubCategory.Category INNER JOIN " + "dbo.tblDiagnosisCues ON dbo.tblDiagnosisSubCategory.SubCategory = dbo.tblDiagnosisCues.SubCategoryID " + "where effectivedate <= getdate() and (termdate >= getdate() or termdate is null) order by tblDiagnosisCues.Description";
        SqlCommand cmd = new SqlCommand(strSQL, cnn) {CommandType = CommandType.Text};
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        try
        {
            //cnn.Open();
            da.Fill(ds);
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
            cmd.Dispose();
            da.Dispose();
            //ds.Dispose();
            cnn.Close();
            cnn.Dispose();
        }
        return ds;
    }

Причина, по которой я знаю, что он возвращает правильные имена столбцов, заключается в том, что я попробовал следующее с помощью окна DevExpress LookUpEdit, и оно заполняет правильные столбцы из БД ->

            var myDiagnosis = new Diagnosis();
        var ds = myDiagnosis.RetrieveDiagnosisCodes();
        lkuDiagnosis.Properties.DataSource = ds;
        lkuDiagnosis.Properties.PopulateColumns();
        lkuDiagnosis.Properties.DisplayMember = ds.Tables[0].Columns[1].ColumnName;
        lkuDiagnosis.Properties.ValueMember = ds.Tables[0].Columns[0].ColumnName;

Идеи? В основном, я даже не знаю, как отследить это ... Как его отладить?

РЕДАКТИРОВАТЬ 1

На основании комментария я сам запустил следующий SQL, и он дал 650 результатов ...

select tblDiagnosisCues.*, 
    tblDiagnosisCategory.Description as CategoryDesc,   
    tblDiagnosisSubCategory.Description as SubCategoryDesc 
FROM dbo.tblDiagnosisCategory 
    INNER JOIN dbo.tblDiagnosisSubCategory 
    ON dbo.tblDiagnosisCategory.Category = dbo.tblDiagnosisSubCategory.Category 
        INNER JOIN dbo.tblDiagnosisCues ON dbo.tblDiagnosisSubCategory.SubCategory = dbo.tblDiagnosisCues.SubCategoryID 
where effectivedate <= getdate() and (termdate >= getdate() or termdate is null) order by tblDiagnosisCues.Description

Ответы [ 2 ]

4 голосов
/ 27 мая 2009

// cnn.open ();

...

// ds.dispose ();

Нет необходимости указывать имя таблицы в конструкторе набора данных. Метод fill добавит таблицу. Также нет необходимости открывать соединение, так как sqldataadapter откроет и закроет соединение для вас. Кроме того, я предпочитаю возвращать данные, а не набор данных с одной таблицей.

Код можно изменить следующим образом ... конечно, добавьте попытку try, если вы хотите зарегистрировать исключение.

public DataTable RetrieveDiagnosisCodes()
{
    //string tableName = "tblDiagnosisCues";
    DataSet ds = new DataSet();
    Datatable dt = null;
    //strSQL = "select * from " & tableName & " where effectivedate <= getdate() and (termdate >= getdate() or termdate is null)"
    string strSQL = "select tblDiagnosisCues.*, tblDiagnosisCategory.Description as CategoryDesc, tblDiagnosisSubCategory.Description as SubCategoryDesc " + "FROM dbo.tblDiagnosisCategory INNER JOIN " + "dbo.tblDiagnosisSubCategory ON dbo.tblDiagnosisCategory.Category = dbo.tblDiagnosisSubCategory.Category INNER JOIN " + "dbo.tblDiagnosisCues ON dbo.tblDiagnosisSubCategory.SubCategory = dbo.tblDiagnosisCues.SubCategoryID " + "where effectivedate <= getdate() and (termdate >= getdate() or termdate is null) order by tblDiagnosisCues.Description";

    using(SqlDataAdapter da = new SqlDataAdapter(strSQL, Settings.Default.CMOSQLConn))
    {
      da.Fill(ds);
    }
    if (ds.Tables.Count > 0)
    {
      dt = ds.Tables[0];
    }

    return dt;
}
0 голосов
/ 27 мая 2009

Если данные правильно привязаны к другому элементу управления, это указывает на проблему с процессом привязки данных. Как выглядит ваша установка привязки данных для рассматриваемого комбинированного списка? Все имена столбцов правильно прописаны и настроены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...