无法隐式转换类型';System.Data.SqlClient.SqlDataReader';到';S

本文关键字:SqlClient Data SqlDataReader System 转换 类型 | 更新日期: 2023-09-27 18:05:57

我正在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;
        }
    }

感谢大家。。。。

无法隐式转换类型';System.Data.SqlClient.SqlDataReader';到';S

....
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:使用iDataReader 加载DataTable

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

不能仅将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。

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

DataTable.Fill可用于从读取器填充数据表。