web-dev-qa-db-ja.com

DataSetから変数への値の取得

データセットを返す次のメソッドがあります。 .NET2.0を使用しています

DataSet ds = GetAllRecords();

特定の行の各列から値を取得し、それを変数にバインドしたいと思います。これはどのように達成できますか?

現在、このメソッドはテーブルからすべての行を返し、IDに基づいてその特定の行を見つける必要があります。

しかし、それが不可能な場合、私は一緒に来ることができます

DataSet ds = GetSpecificRecord(id);

ただし、各列から値を取得して変数にバインドする必要があります。アドバイスをお願いします。

6
kalls
// Create a table 
DataTable table = new DataTable("users");
table.Columns.Add(new DataColumn("Id", typeof(int)));
table.Columns.Add(new DataColumn("Name", typeof(string)));

table.Rows.Add(1, "abc");
table.Rows.Add(2, "ddd");
table.Rows.Add(3, "fff");
table.Rows.Add(4, "hhh d");
table.Rows.Add(5, "hkf ds");

// Search for given id e.g here 1

DataRow[] result = table.Select("Id = 1"); // this will return one row for above data 
foreach (DataRow row in result)
{
    Console.WriteLine("{0}, {1}", row[0], row[1]);
}
6
Damith

これにより、行0から値が取得されます。明らかに、返された複数の行に対して変更する必要があります。

long id = ds.Tables[0].Rows[0].Field<long>("ID");
3
samack

型付きデータセットの使用を検討しましたか?テーブルの主キーに基づいて行を探している場合は、IDで行を取得するためのメソッドが自動生成され、名前で列の値を取得できるように強く型付けされます。

それらは.Net2.0では非常に便利でしたが、LINQによってかなり時代遅れになりました。

編集:少し良い参照URL

http://www.c-sharpcorner.com/UploadFile/rupadhyaya/TypedDataSets12032005021013AM/TypedDataSets.aspx

1
Mordy

この簡単な方法を使用して、データセットから値を取得できます。

  System.Data.DataSet ds = db.MySelect(
                    "Fields",
                    "Table",
                     "Condition"
                     );

        if (ds != null)
        {
            if (ds.Tables[0].Rows.Count > 0)
            {
               object value=Tables[0].Rows[indx]["field name"];
            }
        }
1
Akbar Jafari

学生テーブルから値をフェッチし、コンソールウィンドウに表示します。

class Class1
{
    static void Main(string[] args)
    { 
          SqlConnection con=new SqlConnection(<connectionstring>);           
          SqlCommand cmd = new SqlCommand("select * from Student", con);
          SqlDataAdapter ad = new SqlDataAdapter(cmd);
          DataSet ds=new DataSet();
          ad.Fill(ds);
          for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
          {
              try
              {

                  DataRow r = ds.Tables[0].Rows[i];
                  Console.WriteLine(r.Field<Int32>(0));
                  Console.WriteLine(r.Field<String>(1));
                  Console.WriteLine(r.Field<String>(2));
                  Console.WriteLine(r.Field<Decimal>(3));
                  Console.WriteLine(r.Field<Int16>(4));

              }
              catch (Exception ex)
              {
                  Console.WriteLine(ex);
              }
          }

          Console.ReadKey();
    }
}

sql学生テーブル情報

Id int
Name varchar(50)
EmailId nvarchar(50)
MobileNo numeric(10,0)
Standard smallint
0
user2248979

これはLINQで実行できます。

DataRow resultRow = ds.Tables["SomeTable"].AsEnumerable().Where(row => row.Field<int>("SomeID") == 1).FirstOrDefault();

。NET 2.0以下の場合

DataTableに主キーが定義されている場合、次のような行を見つけることができます。

DataTable table = ds.Tables["SomeTable"];
DataRow row = table.Rows.Find(1);

主キーがない場合は、次のように割り当てることができます。

DataTable table = ds.Tables["SomeTable"];
table.PrimaryKey = new DataColumn[] { table.Columns["SomeID"] };

DataRow row = table.Rows.Find(1);

もう1つのオプションは、次のようにDefaultViewのRowFilterプロパティを使用することです。

DataTable table = ds.Tables["SomeTable"];

table.DefaultView.RowFilter = "SomeID == 1"; //not sure if it's == or = here
DataRow row = table.DefaultView[0].Row;

最後に、DataTable.Select()メソッドを使用して行を検索することもできます。

0
James Johnson