2011-08-16 36 views
1

我正在使用3層架構C#項目。我編寫了代碼來對SQL中的記錄進行排序。但它不會返回任何值。不能鍵入「System.Data.SqlClient.SqlDataReader」隱式轉換爲「System.Data.DataSet中」

查詢:

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

感謝所有....

回答

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

感謝ü4周烏爾答覆的先生們.. –

0

DataTable.Fill你可以用它來填補讀者的DataTable。

+0

感謝ü4周烏爾答覆的先生們.. –

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); 
+0

感謝ü4周烏爾答覆的先生們.. –

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

+0

感謝ü4周烏爾答覆的先生們.. –

相關問題