2017-02-01 13 views
1

C#を初めて使用しています。初心者向けのKudvenkatチュートリアルにちょうど従ってください。私は、この行のエラーを取得:ExecuteReader();"System.Data.SqlClient.SqlDataReader"を "SqlDataReader.SqlDataReader"に暗黙的に変換できません。

を行うには

SqlDataReader rdr = cmd.ExecuteReader(); 

何かを、私はその何かがシンプル確信しているが、それが起こるんなぜあなたは説明してくださいだろうか?

マイaspx.csファイル

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

namespace SqlDataReader 
{ 
    public partial class SqlDataReader : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      // creating variable that holds value of connection string 
      string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 

      // creating connection object with use of "using" block 
      using (SqlConnection con = new SqlConnection(CS)) 
      { 
       con.Open(); 

       SqlCommand cmd = new SqlCommand("select top 5 ProductID, LocationID,Shelf,Quantity from [Production].[ProductInventory]", con); 

       SqlDataReader rdr = cmd.ExecuteReader(); // --Error 

       GridView1.DataSource = rdr; 
       GridView1.DataBind(); 
      } 
     } 
    } 
} 

私のaspxファイル:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SqlDataReader.aspx.cs" Inherits="SqlDataReader.SqlDataReader" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

    </div> 
     <asp:GridView ID="GridView1" runat="server" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"> 
      <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> 
      <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> 
      <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> 
      <SortedAscendingCellStyle BackColor="#FFF1D4" /> 
      <SortedAscendingHeaderStyle BackColor="#B95C30" /> 
      <SortedDescendingCellStyle BackColor="#F1E5CE" /> 
      <SortedDescendingHeaderStyle BackColor="#93451F" /> 
     </asp:GridView> 
    </form> 
</body> 
</html> 
+2

あなたのクラス(と名前空間)を他の名前、クラス名 'SqlDataReader'に名前を付けてみてください。公式のものと同じです。C#はあなたが使用しているものを知らない – Prisoner

+2

または、 rdr = cmd.ExecuteReader(); 'またはそれ以上:' System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader(); '。もちろん、@Prisonerが提案する名前空間の名前を変更するのがベストプラクティスです。 –

+0

君たちありがとう !!! – Oleg

答えて

1

それが原因であなたのクラスと名前空間の名前であった、コンパイラはrdrがタイプSqlDataReaderであることを前提としていますネームスペースSqlDataReaderの下にクラス名があります。だから、ここで最善のオプションはクラス名をに変更し、代替オプションも完全修飾名です。 。これは、あなたが、クラスの名前空間を指定するだけでなくしばらくクラスをインスタンス化するために、すなわち、コードは次のようになります持っていることを意味:あなたのための別のオプションを使用して、静的な型定義の使用、varを作るある

System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader(); // No Error now 

このタイプは、自動的に、我々は彼らにassigingされた値を保存するために割り当てられます、それは次のようになります。

var rdr = cmd.ExecuteReader(); // No Error now 

ここrdrExecuteReader()方法がreturingされるどのような種類のものであろう。

+0

素晴らしい説明をありがとう!!!! – Oleg

+0

@Oleg:あなたをお手伝いします –

関連する問題