无法将类型'System.Data.SqlClient.SqlDataReader'隐式转换为'System.Data.DataSet'

时间:2011-08-16 10:20:17

标签: c# sql

我正在使用3层架构在C#中进行项目。我编写了代码来对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;
    }
}

用户界面:

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 个答案:

答案 0 :(得分:1)

....
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: load DataTable with iDataReader

答案 1 :(得分:0)

DataTable.Fill您可以用来从阅读器填充数据表。

答案 2 :(得分:0)

您不能只将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);

如果您不使用DataSet,则可以使用DataTable。

DataTable dt = new DataTable();
da.Fill(dt);

答案 3 :(得分:0)

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;
            }
        }