- PR -

DataViewでの抽出

投稿者投稿内容
C#初心者
常連さん
会議室デビュー日: 2005/12/22
投稿数: 24
投稿日時: 2006-01-10 12:12
DataViewで、11月16日〜12月15日といった指定した日付の取得を行いたいのですが、
抽出条件が分かりませんので教えてください。BETWEENが利用できず困っています。

//[実績M]テーブルのレコードを取得してデータセットに格納する
da = new System.Data.OleDb.OleDbDataAdapter(
"SELECT 社員No,日付 FROM 実績M", cn);
da.Fill(ds, "実績M");

// 表示するレコードをDataViewに取得する
dv = new DataView(ds.Tables["実績M"]
,"","", DataViewRowState.CurrentRows);

// DataGridコントロールにDataViewの内容を表示する
dataGrid1.DataSource = dv;
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-01-10 12:26
引用:

C#初心者さんの書き込み (2006-01-10 12:12) より:
DataViewで、11月16日〜12月15日といった指定した日付の取得を行いたいのですが、
抽出条件が分かりませんので教えてください。BETWEENが利用できず困っています。

//[実績M]テーブルのレコードを取得してデータセットに格納する
da = new System.Data.OleDb.OleDbDataAdapter(
"SELECT 社員No,日付 FROM 実績M", cn);
da.Fill(ds, "実績M");

// 表示するレコードをDataViewに取得する
dv = new DataView(ds.Tables["実績M"]
,"","", DataViewRowState.CurrentRows);

// DataGridコントロールにDataViewの内容を表示する
dataGrid1.DataSource = dv;


型にもよるんだけど、Whereに(日付>='11/16') AND (日付<='12/15')を書くとか。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-01-10 15:58
お世話になります。

引用:

C#初心者さんの書き込み (2006-01-10 12:12) より:
DataViewで、11月16日〜12月15日といった指定した日付の取得を行いたいのですが、
抽出条件が分かりませんので教えてください。BETWEENが利用できず困っています。


ぶさいくろうさんも書かれていますが、
[日付]のデータ型が、日付の型であれば、
こんな感じでしょうか。

DataView dv = new DataView(ds.Tables["実績M"],
"[日付] >= '2005/11/15' AND [日付] <= '2005/12/15'",
"", DataViewRowState.CurrentRows);
this.dataGrid1.DataSource = dv;
C#初心者
常連さん
会議室デビュー日: 2005/12/22
投稿数: 24
投稿日時: 2006-01-10 16:32
ありがとうございました。おかげさまで抽出することができました。

もうひとつ聞きたいことがあるんですが、
16日〜31日の日付と曜日を表示させようと思っています。
16日の日付から、曜日を取得し、後はDayOfWeekをずらして表示しようと考えています。
しかし、+1をすると 金から土になるのはいいのですが、それ以降変わりません。
どこがおかしいですか?すみませんがよろしくお願いします。

DateTime today=new DateTime(2005,12,16);
string[]weeks={"(日)","(月)","(火)","(水)","(木)","(金)","(土)"};

// DataSetのテーブルにレコードを追加する
for(i=16; i<=31; i++)
{
dt.Rows.Add(new object[]{i + " " + weeks[((int)today.DayOfWeek)+1]});
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-10 17:41
引用:

C#初心者さんの書き込み (2006-01-10 16:32) より:

しかし、+1をすると 金から土になるのはいいのですが、それ以降変わりません。
どこがおかしいですか?すみませんがよろしくお願いします。


DayOfWeek 列挙体のメンバに割り当てられた数値を見れば一目瞭然なのですが、
土曜日 (Saturday = 6) 以降は 日曜日 (Sunday = 0) に戻さないといけませんね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
C#初心者
常連さん
会議室デビュー日: 2005/12/22
投稿数: 24
投稿日時: 2006-01-10 18:01
0に戻すのは、分かってたんですが、表示させると
16 (水)
17 (水)
18 (水) となってしまいます。お手数をおかけしますが、最後にこれだけ教えてください。本当に困っています。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-01-10 18:15
引用:

dt.Rows.Add(new object[]{i + " " + weeks[((int)today.DayOfWeek)+1]});


todayに1日加算してるんじゃなくて、(int)today.DayOfWeekに1を加算してるからじゃないですか?

[追記]
一応リンク
DateTime.AddDays メソッド


[ メッセージ編集済み 編集者: でっち6号 編集日時 2006-01-10 18:35 ]
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-01-10 18:39
お世話になります。

引用:

C#初心者さんの書き込み (2006-01-10 16:32) より:
ありがとうございました。おかげさまで抽出することができました。

もうひとつ聞きたいことがあるんですが、
16日〜31日の日付と曜日を表示させようと思っています。
16日の日付から、曜日を取得し、後はDayOfWeekをずらして表示しようと考えています。
しかし、+1をすると 金から土になるのはいいのですが、それ以降変わりません。
どこがおかしいですか?すみませんがよろしくお願いします。

DateTime today=new DateTime(2005,12,16);
string[]weeks={"(日)","(月)","(火)","(水)","(木)","(金)","(土)"};

// DataSetのテーブルにレコードを追加する
for(i=16; i<=31; i++)
{
dt.Rows.Add(new object[]{i + " " + weeks[((int)today.DayOfWeek)+1]});
}



これではだめですかね...。
コード:
ds.Tables["実績M"].Columns.Add("曜日", typeof(string));
foreach (DataRow row in ds.Tables["実績M"])
{
  DateTime currentDay = (DateTime)row["日付"];
  row["曜日"] = currentDay.ToString("ddd");
}

スキルアップ/キャリアアップ(JOB@IT)