1

私は C# で asp.net プロジェクトを作成しており (私の C# 構文は非常にさびています)、プロジェクトで作成された組み込みデータベースを使用しています。私は aspnet_Tutorials という名前のテーブルを作成しました。このテーブルには、(現時点では) ユーザーが送信したデータの 2 つの列、TutorialName と TutorialContent が格納されています。とてもシンプルです。これは学習プロジェクトです。

私がする必要があるのは、aspnet_Tutorials の最初の列からリストを作成し、それを使用してページ上にチュートリアルの「ディレクトリ」を作成することです。私が問題を抱えている部分は、主に構文的に、列に接続して反復処理を行い、値をリストに取得することです。誰かがこれの簡単な例を提供できますか? そして、おそらくコードで何が起こっているのかを説明してください。

public class TutorialsDirDAL
    {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();


        public List<string> DisplayTutorials() //parameters? String qry?
        {
           //query the database table, foreach loop over the data, place it into a list?
        }
    }

簡単な SQL クエリの書き方を知っています。しかし、私はグーグルでこのためのいくつかの異なる設定を見てきました. 私は現在、次のクエリを用意しています。自由に選択するか、クエリを使用するよりも優れたソリューションを提供してください。

cmd.CommandText = "SELECT * FROM ASPNET_TUTORIALS (TutorialTitle)"
                + "VALUES (@tutorialTitle)";

ありがとうございました!

4

2 に答える 2

3

ebad86の答えは受け入れられますが、あなたは明らかに学んでいるので、OOプリンシパルを導入すると、この時点であなたが学ぼうとしていることで水が濁ると思います.

基本的な方法は次のとおりです。

private void GetData()
{
   //The object that will physically connect to the database
   using(SqlConnection cnx = new SqlConnection("<your connection string>")
   {
            //The SQL you want to execute
           SqlCommand cmd = new SqlCommand("SELECT * FROM ASPNET_TUTORIALS");
           //Open the connection to the database
           cnx.Open();
           //execute your command
           using (IDataReader dataReader = cnx.ExecuteReader(cmd))
           {
             //Loop through your results
             while(dataReader.Read())
             {
                //do whatever to the data
                ListItem item = new ListItem(Convert.ToString(dataReader["TutorialName"])); 
                lst.Items.Add(item);
             }
           }
   }
}

これはすべて非常に簡単です。ただし、最も関心のある部分は while ループです。ループは返されたすべてのレコードを通過し、必要なことは何でも実行できます。私の例では、'lst' という名前の ListBox があると想定しており、単に 'TutorialName' の名前を持つ ListItems をそれに追加しているだけです。この時点で、データに対して必要なことは何でも文字通り実行できます。あなたの例(リストを返す)に合うようにするには、次のようにします。

private List<string> GetData()
{
   List<string> lst = new List<string>();
   //The object that will physically connect to the database
   using(SqlConnection cnx = new SqlConnection("<your connection string>")
   {
            //The SQL you want to execute
           SqlCommand cmd = new SqlCommand("SELECT * FROM ASPNET_TUTORIALS");
           //Open the connection to the database
           cnx.Open();
           //execute your command
           using (IDataReader dataReader = cnx.ExecuteReader(cmd))
           {
             //Loop through your results
             while(dataReader.Read())
             {
                lst.Add(Convert.ToString(dataReader["TutorialName"]));
             }
           }
   }
   return lst;
}

ご不明な点がございましたらご返信ください。

于 2012-07-10T14:05:52.903 に答える
3

データリーダーを使用してフェッチし、オブジェクトにマップできます。次のような大まかなコードを提供できます。

            using (IDataReader objDataReader = objDB.ExecuteReader(objCMD))
            {
                while (objDataReader.Read())
                {
                    DataBaseObject obj = new DataBaseObject();
                    obj = MapObjectToList(objDataReader);
                    ObjectList.Add(obj);

                }
                objDataReader.Dispose();
            }

// マッピング関数は次のように呼び出すことができます:

private DataBaseObject MapObjectToList(IDataReader objDataReader)
{
    DataBaseObject obj = new DataBaseObject();
    obj.Prop1Name = base.GetDataValue<string>(objDataReader, "Column1Name");
    obj.Prop2Name = base.GetDataValue<string>(objDataReader, "Column2Name");
    return obj;
}

しかし、これは私がどのようにそれを行うかの大まかな考えです。

于 2012-07-10T13:46:32.587 に答える