ASP.NET入門からノートに精通する9章-DataSetとDataAdapterオブジェクトの使用

5070 ワード

DataSetオブジェクトはADOである.NETの中心概念は、様々なデータソースから独立している.切断式、分散式をサポートするコアオブジェクトである.データセットオブジェクトは、データソースのデータテーブルに対応する任意の複数のテーブルを含む.
DataSetは、DataAdapterで埋め込むことができる.
DataAdapterオブジェクトは、DataSetとデータベースとの橋渡しである.主にデータソースからデータを取得し、DataSetオブジェクトに埋め込む..Netには主に2種類のDataAdapterオブジェクト、OleDataAdapterとSqlDataAdapterがある.
DataSetとDataAdapterを組み合わせて使用する手順は、次のとおりです.
SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);//DataAdapterオブジェクトを作成します.SqlStrはクエリー文で、MyConはデータベース接続です.
DataSet myDs = new DataSet();
myDa.Fill(myDs);//DataSetオブジェクトの入力
次に、DataSetとDataAdapterを用いるオブジェクトの具体例を示す.
Musicデータソースのエントリを表示し、名前が長すぎる場合は省略記号で代用します.
考え方は.新しいDataSetオブジェクトを作成し、DataAdapterオブジェクトで結果を検索し、DadaSetオブジェクトを入力し、DataSetオブジェクトのテーブルを変更します.そしてGridViewにバインドデータを表示する.
まずSqlServerでデータベースを用意します.名前はMusic、テーブル名はcatalogです.2列はid intとname nvarcharである.
Webフォームを追加する新しいWebサイト
WebフォームにGredViewコントロールを追加します.名前はGridView 1です.
Webでconfigに接続文字列を追加

		

デファルトでaspx.cs中
3つのネーミングスペースを追加
using System.Data.SqlClient; using System.Configuration; using System.Data;
新しいGetConnectionメソッドを作成し、ConfigurationManagerを使用してWebを取得します.configの接続文字列
    public SqlConnection GetConnection()
    {
        string MyStr = ConfigurationManager.AppSettings["ConnectString"].ToString();
        SqlConnection MyCon = new SqlConnection(MyStr);
        return MyCon;
    }
SubStr関数を新規作成し、一定の長さを超える文字列を省略記号で表示します.
    public string SubStr(string sString, int nLeng)
    {
        if (sString.Length <= nLeng)
        {
            return sString;
        }
        string sNewStr = sString.Substring(0, nLeng);
        sNewStr = sNewStr + "...";
        return sNewStr;
    }

PageLoadイベントで、次のコードを追加します.
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection MyCon = GetConnection();
            MyCon.Open();
            string SqlStr = "select * from catalog";
            SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);
            DataSet myDs = new DataSet();
            myDa.Fill(myDs);
            for (int i = 0; i <= myDs.Tables[0].Rows.Count - 1; i++)
            {
                myDs.Tables[0].Rows[i]["name"] =
                    SubStr(Convert.ToString(myDs.Tables[0].Rows[i]["name"]), 5);
            }
            GridView1.DataSource = myDs;
            GridView1.DataKeyNames = new string[] { "id" };//id        
            GridView1.DataBind();
        }

    }

実行します.開いているページは次のとおりです.
id
name
1
ji...
2
ha...
3
gg...
6
my...
まとめ:
1.GridViewオブジェクトの使用は、コントロール上で直接データソースを選択することで、データソースとの自動バインドを実現することができる2つの方法に直面している.
もう1つは本例の手法である、データソースからデータを取得した後、データに対して何らかの処理を行い、現実的にGridViewで実行することを目的としている.コードは次のとおりです.
GridView1.DataSource = myDs; GridView1.DataKeyNames = new string[] { "id"};//「id」とデータソースのカラム名は一致する必要がありますGridView 1.DataBind();
2.本例におけるDataSetオブジェクトの使用は
myDs.Tables[0].Rows[i]["name"]
入力時にfillの2番目のパラメータを指定する場合(この仮想テーブルの名前を指定します)
myDa.Fill(myDs,"catalog");
下付き文字を使わずにテーブル名で呼び出すことができ、どの下付き文字か忘れないようにします.
myDs.Tables["catalog"].Rows[i]["name"]
例の作成プロセスは作成後に親測を経て、手順に従って一歩一歩成功に実行することができ、間違いがあれば、指摘を惜しまないでください.
補足:
DataSetのデータを使用してデータベースを更新する
DataAdapterオブジェクトからSqlCommandBuilderオブジェクトを作成し、DataAdapterを使用します.Updateは、SqlCommand BuilderオブジェクトからINSERT、UPDATEまたはDELETEコマンドを自動的に生成します.
DataSetのデータには、少なくとも1つのプライマリ・キー列または一意の列が必要です.
上記の例では、Pageloadのコードを次のコードに置き換えることで、DataSetの変更を実現してデータベースに更新することができる.
        if (!IsPostBack)
        {
            SqlConnection MyCon = GetConnection();
            MyCon.Open();
            string SqlStr = "select * from catalog";
            SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);
            DataSet myDs = new DataSet();
            SqlCommandBuilder builder = new SqlCommandBuilder(myDa);//  SqlCommandBuilder  
            myDa.Fill(myDs, "id");
            for (int i = 0; i <= myDs.Tables[0].Rows.Count - 1; i++)
            {
                myDs.Tables["id"].Rows[i]["name"] =
                    SubStr(Convert.ToString(myDs.Tables["id"].Rows[i]["name"]),2);
            }
            myDa.Update(myDs, "id");
            GridView1.DataSource = myDs;
            GridView1.DataKeyNames = new string[] { "id" };
            GridView1.DataBind();
            myDa.Dispose();
            myDs.Dispose();
            MyCon.Close();
        }

実行後にSqlServerで確認すると、データベースの内容も更新され、キー文は次のようになります.
            SqlCommandBuilder builder = new SqlCommandBuilder(myDa);//  SqlCommandBuilder  
            myDa.Fill(myDs, "id");
            myDa.Update(myDs, "id");//