- PR -

SQLに挿入処理

投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-05-15 10:47
お世話になります。

> string connStr = SqlDataSource1.ConnectionString;
で取得した文字列で処理することでうまくいきました。ありがとうございます。


下記のコードで目的のデータ(日付)を書き込むことができました。
ただ、書き込み時に並び替えが起きているらしく 2008/5/1 の次が2008/5/10になってしまいます。これを挿入順にするにはどこで設定できますか?教えてください。

SqlConnection conn = new SqlConnection(connStr);
string sqlStr = "INSERT INTO Holidays" + " VALUES (@Date, ' ', ' ', ' ', ' ', ' ', ' ', ' ')";
conn.Open();

for (int i = 0; i < 31; ++i)
{
string stDate;

stDate = string.Format("{0}/{1}/{2}", cal1.SelectedDate.Year.ToString(), cal1.SelectedDate.Month.ToString(), cal1.SelectedDate.Day.ToString());

SqlCommand cmd = new SqlCommand(sqlStr, conn);
SqlParameter p1 = new SqlParameter("@Date", stDate);
cmd.Parameters.Add(p1);

int num = cmd.ExecuteNonQuery();
// Console.WriteLine(num);

cal1.SelectedDate = cal1.SelectedDate.AddDays(+1);
}

conn.Close();
conn.Dispose();
}
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-05-15 11:18
お世話になります。

> string connStr = SqlDataSource1.ConnectionString;
で取得した文字列で処理することでうまくいきました。ありがとうございます。


下記のコードで目的のデータ(日付)を書き込むことができました。
ただ、書き込み時に並び替えが起きているらしく 2008/5/1 の次が2008/5/10になってしまいます。これを挿入順にするにはどこで設定できますか?教えてください。

SqlConnection conn = new SqlConnection(connStr);
string sqlStr = "INSERT INTO Holidays" + " VALUES (@Date, ' ', ' ', ' ', ' ', ' ', ' ', ' ')";
conn.Open();

for (int i = 0; i < 31; ++i)
{
string stDate;

stDate = string.Format("{0}/{1}/{2}", cal1.SelectedDate.Year.ToString(), cal1.SelectedDate.Month.ToString(), cal1.SelectedDate.Day.ToString());

SqlCommand cmd = new SqlCommand(sqlStr, conn);
SqlParameter p1 = new SqlParameter("@Date", stDate);
cmd.Parameters.Add(p1);

int num = cmd.ExecuteNonQuery();
// Console.WriteLine(num);

cal1.SelectedDate = cal1.SelectedDate.AddDays(+1);
}

conn.Close();
conn.Dispose();
}
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2008-05-15 13:54
>ただ、書き込み時に並び替えが起きているらしく 2008/5/1 の次が2008/5/10になってし

RDB では、書き込み順など保証されません。
単に、SqlDataSource1 でデータ検索してくる時に、ORDER BY してないだけでしょう。

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-05-15 14:06
挿入順というよりは、日付の順で並んでほしいんですよね?

もしかして、HolidayテーブルのDate列がcharやvarcharで定義されてたりしませんか?
そうだとしたら、Dateの昇順で並べても日付の順にはならないでしょう。
Date列をdatetimeで定義し直すか、Date列に格納する値をyyyy/MM/dd形式の文字列で格納するかすれば、ちゃんと並びそうな気がします。

※若干言葉が足りなかったのを修正

[ メッセージ編集済み 編集者: rain 編集日時 2008-05-15 14:22 ]
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-05-15 15:04
お世話になります。

> 挿入順というよりは、日付の順で並んでほしいんですよね?
まさに、そのとおりです。
Format("{0:yyyy/MM/dd}", cal1.SelectedDate);
とすることでうまくいくようになりました。
ありがとうございます。

> RDB では、書き込み順など保証されません。
そうだったんですか、覚えておきます。

> SqlDataSource1 でデータ検索してくる時に、ORDER BY してないだけでしょう。
Drop by ? これは、どこ見れば書いてありますか?確かに、データを書き込んだあと目的の月を検索しないといけないのでこの作業が必要(?)になるかもしれません。
「SELECT」句の用語?
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2008-05-15 15:47
引用:

これは、どこ見れば書いてありますか?


.aspx ファイル内の asp:SqlDataSource タグに SelectCommand 属性があり、ここに SQL が格納されていると思います。その SQL に ORDER BY 句が含まれていなければ、今たまたま日付順にならんで表示されているだけなので、 ORDER BY 句を付け加える必要があります。
ORDER BY については、Google などで検索してください。

SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-05-15 16:06
お世話になります。

> たまたま日付順にならんで表示されているだけなので
つまりこれは、表示のための並び替えという意味だったんですね。
わかりました。ありがとうございました。
ORDER BY "フィールド一" [ASC, DESC]
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-05-16 13:11
お世話になります。

継続した内容なので、新しいスレッド起こすまでもなくお思いここに投稿させていただきます。

挿入が終わり、読み込みで特定の範囲のデータを読み、GridView に表示したいのですが、このようなエラーが出ます。
「DataSource および DataSourceID は両方とも 'GridView1' 上で定義されています。定義 のうち 1 つを削除してください。」

このGridViewは、タスクメニュでSqlDataSource1にセットしています。コードは下記です。

string sqlStr = string.Format("SELECT * FROM Holidays WHERE Date BETWEEN '{0:yyyy/MM/dd}' AND '{1:yyyy/MM/dd}'", dtStart, dtEnd);
DataSet ds = new DataSet();
try
{
SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, conn);
adapter.Fill(ds);
}
catch (Exception ex)
{
:
}
if (ds.Tables.Count > 0)
{
GridView1.DataSource = ds;
GridView1.DataBind(); <- ここでエラーになる

メッセージからしてデータソースとして1つしかセットできないようですが、GridViewの編集機能など有効にしながらここで読んだ範囲のデータをバインドできないでしょうか、?教えてください。

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