Не удается неявно преобразовать тип «System.Data.SqlClient.SqlDataReader» в «System.Data.DataSet» - PullRequest
1 голос
/ 16 августа 2011

Я делаю проект на C # с использованием 3-х уровневой архитектуры.Я написал код для сортировки записей из SQL.Но он не возвращает никаких значений.

Запрос:

BEGIN
   SELECT 
       Bank_Code, Bank_Name, Bank_ShortName, CreditCard_Commission_Percent 
   FROM
       BankMaster 
   WHERE 
       bank_name LIKE '% + @BankName + %'
END

Вызов запроса - BOL:

public DataSet SortBank()
{
    try
    {
        SqlCommand cmd = new SqlCommand("SortBankMaster", dal.con);
        cmd.Parameters.Add("@BankName", SqlDbType.NVarChar).Value = Bank_Name;
        cmd.CommandType = CommandType.StoredProcedure;

        return cmd.ExecuteReader();                        // Error
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

UI:

public void FillSortBank()
{
    try
    {
        DataSet ds = new DataSet();
        bol.Bank_Name = txtsort.Text;
        ds = bol.SortBank();
        DGVBank.DataSource = ds.Tables[0];
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Это мой DAL:

public DataSet DBread(String Squery)
{
        DataSet DSResult = new DataSet();

        try
        {
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }

            da = new SqlDataAdapter(Squery, con);

            da.Fill(DSResult);

            Console.WriteLine();

            return DSResult;
        }
        catch (Exception ex)
        {
            //UnhandledExceptionHandler();
            //return e.ToString();
            throw ex;
            //return DSResult;
        }
    }

Спасибо всем ....

Ответы [ 4 ]

1 голос
/ 16 августа 2011
....
using (SqlDataReader myReader = cmd.ExecuteReader())
{
   DataTable myTable = new DataTable();
   myTable.Load(myReader);
   cmd.Connection.Close();
   Dim myDataSet As New DataSet()
   myDataSet.Tables.Add(myTable)
   return myDataSet;
}

MSDN: загрузить DataTable с помощью iDataReader

0 голосов
/ 16 августа 2011
public DataSet SortBank()
        {
            try
            {
                SqlCommand cmd = new SqlCommand("SortBankMaster", dal.con);
                cmd.Parameters.Add("@BankName", SqlDbType.NVarChar).Value = Bank_Name;
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adpt.Fill(ds); 
                return ds;                 
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
0 голосов
/ 16 августа 2011

Вы не можете просто преобразовать SqlDataReader в DataSet. Вы можете использовать SqlDataAdapter для заполнения набора данных, если хотите

SqlCommand cmd = new SqlCommand("SortBankMaster", dal.con);
                cmd.Parameters.Add("@BankName", SqlDbType.NVarChar).Value = Bank_Name;
                cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

или вы можете использовать DataTable, если не используете DataSet.

DataTable dt = new DataTable();
da.Fill(dt);
0 голосов
/ 16 августа 2011

DataTable.Fill, вы можете использовать для заполнения таблицы данных из читателя.

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