C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[17]: DataGridの内容をSQLでINSERTしたい


(過去ログ 15 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■5321 / inTopicNo.1)  DataGridの内容をSQLでINSERTしたい
  
□投稿者/ テンツク (1回)-(2007/07/10(Tue) 15:23:42)

分類:[C#] 

こんにちは、始めまして。いつもここにはお世話になっております。

早速質問なのですが、

DataGridに、商品名、金額という列があり、それに関する内容が行として何行かあります。

そのDataGridの中に表示された商品名、金額のすべての行をSQLを使い、テーブルにINSERTさせたいのですが
どのような方法を使えばよろしいでしょうか?

よろしくお願いします。
引用返信 編集キー/
■5345 / inTopicNo.2)  Re[1]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (46回)-(2007/07/11(Wed) 11:07:12)
No5321 (テンツク さん) に返信
>DataGridに、商品名、金額という列があり、それに関する内容が行として何行かあります。
そもそもこのDataGridのにはどうやってデータ表示してます?
DataGrid上で編集がないならば、その元データを使えばいかが?
引用返信 編集キー/
■5348 / inTopicNo.3)  Re[2]: DataGridの内容をSQLでINSERTしたい
□投稿者/ せんべい (4回)-(2007/07/11(Wed) 11:39:47)
2007/07/11(Wed) 11:42:26 編集(投稿者)

No5345 (じゃかるた さん) に返信
> ■No5321 (テンツク さん) に返信
> >DataGridに、商品名、金額という列があり、それに関する内容が行として何行かあります。
> そもそもこのDataGridのにはどうやってデータ表示してます?
> DataGrid上で編集がないならば、その元データを使えばいかが?

private System.Windows.Forms.DataGrid dataGrid1 = new DataGrid();
DataSet ds = new DataSet("出荷明細");
DataTable dt;

public Form1()
{
InitializeComponent();
dt = ds.Tables.Add("出荷明細");
dt.Columns.Add("明細",typeof(int));
dt.Columns.Add("分類名",typeof(string));
dt.Columns.Add("商品コード",typeof(int));
dt.Columns.Add("商品名",typeof(string));
dt.Columns.Add("単価",typeof(int));
dt.Columns.Add("数量",typeof(int));
dt.Columns.Add("金額",typeof(int));
dataGrid1.DataSource = ds.Tables["出荷明細"];
}

private void botton1_Click(object sender, System.EventArgs e)
{
DataRow dr;
dr = dt.NewRow();
dr["明細"] = textBox1;
dr["分類名"] = textBox2;
dr["商品コード"] = Convert.ToInt32(textBox3);
dr["商品名"] = textBox4;
dr["単価"] = textBox5;
dr["数量"] = Convert.ToInt32(textBox6);
dr["金額"] = Convert.ToInt32(textBox7);
dt.Rows.Add(dr);
}

このような形でコーティングし、ボタンを押すたびにDataGridにデーターが追加されていっているのです。

その追加されていったデータをボタン2を押すとSQLを使い追加内容をINSERTさせていく・・・という風にしたいのです。

名前が変わってしまいましたが「テンツク」です。他で違う質問もさせてもらったものでして><
引用返信 編集キー/
■5349 / inTopicNo.4)  Re[3]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (47回)-(2007/07/11(Wed) 12:02:07)
No5348 (せんべい さん) に返信
> このような形でコーティングし、ボタンを押すたびにDataGridにデーターが追加されていっているのです。
例えばですが、
private static ArrayList list = new ArrayList();
を宣言しておいて

ボタン1のクリックイベント(追加処理)内で
string[] str = new string[2];
str[0] = textBox4;
str[1] = Convert.ToInt32(textBox7);
list.Add(str);

ボタン2のクリックイベントで
listカウント分だけinsert処理を行うのはいかがでしょう?

引用返信 編集キー/
■5357 / inTopicNo.5)  Re[4]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (2回)-(2007/07/11(Wed) 13:15:31)
No5349 (じゃかるた さん) に返信
> ■No5348 (せんべい さん) に返信
>>このような形でコーティングし、ボタンを押すたびにDataGridにデーターが追加されていっているのです。
> 例えばですが、
> private static ArrayList list = new ArrayList();
> を宣言しておいて
>
> ボタン1のクリックイベント(追加処理)内で
> string[] str = new string[2];
> str[0] = textBox4;
> str[1] = Convert.ToInt32(textBox7);
> list.Add(str);
>
> ボタン2のクリックイベントで
> listカウント分だけinsert処理を行うのはいかがでしょう?



うむむ・・・・理解力がなくて、すいません。もう少し詳しく教えていただいたりお願いできないでしょうか?
申し訳ありません。
>
引用返信 編集キー/
■5359 / inTopicNo.6)  Re[5]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (50回)-(2007/07/11(Wed) 13:25:35)
No5357 (テンツク さん) に返信
>うむむ・・・・理解力がなくて、すいません。もう少し詳しく教えていただいたりお願いできないでしょうか?
>申し訳ありません。
適当ですが。

private System.Windows.Forms.DataGrid dataGrid1 = new DataGrid();
DataSet ds = new DataSet("出荷明細");
DataTable dt;

public Form1()
{
InitializeComponent();
dt = ds.Tables.Add("出荷明細");
dt.Columns.Add("明細",typeof(int));
dt.Columns.Add("分類名",typeof(string));
dt.Columns.Add("商品コード",typeof(int));
dt.Columns.Add("商品名",typeof(string));
dt.Columns.Add("単価",typeof(int));
dt.Columns.Add("数量",typeof(int));
dt.Columns.Add("金額",typeof(int));
dataGrid1.DataSource = ds.Tables["出荷明細"];
}

//追加
private static ArrayList list = new ArrayList();

private void botton1_Click(object sender, System.EventArgs e)
{
DataRow dr;
dr = dt.NewRow();
dr["明細"] = textBox1;
dr["分類名"] = textBox2;
dr["商品コード"] = Convert.ToInt32(textBox3);
dr["商品名"] = textBox4;
dr["単価"] = textBox5;
dr["数量"] = Convert.ToInt32(textBox6);
dr["金額"] = Convert.ToInt32(textBox7);
dt.Rows.Add(dr);
//以下追加
string[] str = new string[2];
str[0] = textBox4;
str[1] = Convert.ToInt32(textBox7);
list.Add(str);

}

private void botton2_Click(object sender, System.EventArgs e)
{
for(int i=0<list.Count;i++)
{
string[] str = (string[])list[i]
//インサート処理
//insert into テーブル (商品名, 金額) values (str[0], str[1])
}
}
引用返信 編集キー/
■5370 / inTopicNo.7)  Re[6]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (3回)-(2007/07/11(Wed) 15:45:22)
上記を参考にコーティングしてみたところ、DataGridに1件だけある場合はINSERTに成功するのですが
2件以上あるときにINSERTしようとするとシステムエラーがおきてしまいます。なぜでしょう?


private System.Windows.Forms.DataGrid dataGrid1 = new DataGrid();
DataSet ds = new DataSet("出荷明細");
DataTable dt;

public Form1()
{
InitializeComponent();
dt = ds.Tables.Add("出荷明細");
dt.Columns.Add("明細",typeof(int));
dt.Columns.Add("分類名",typeof(string));
dt.Columns.Add("商品コード",typeof(int));
dt.Columns.Add("商品名",typeof(string));
dt.Columns.Add("単価",typeof(int));
dt.Columns.Add("数量",typeof(int));
dt.Columns.Add("金額",typeof(int));
dataGrid1.DataSource = ds.Tables["出荷明細"];
}

//追加
private static ArrayList list = new ArrayList();

private void botton1_Click(object sender, System.EventArgs e)
{
DataRow dr;
dr = dt.NewRow();
dr["明細"] = textBox1;
dr["分類名"] = textBox2;
dr["商品コード"] = Convert.ToInt32(textBox3);
dr["商品名"] = textBox4;
dr["単価"] = textBox5;
dr["数量"] = Convert.ToInt32(textBox6);
dr["金額"] = Convert.ToInt32(textBox7);
dt.Rows.Add(dr);
//以下追加
//商品名なども数字なのでINT型にしました。

int[] i = new int[7];
int[0] = Convert.ToInt32(textBox1);
int[1] = Convert.ToInt32(textBox2);
int[2] = Convert.ToInt32(textBox3);
int[3] = Convert.ToInt32(textBox4);
int[4] = Convert.ToInt32(textBox5);
int[5] = Convert.ToInt32(textBox6);
int[6] = Convert.ToInt32(textBox7);
list.Add(i);

}

private void botton2_Click(object sender, System.EventArgs e)
{
for(int ii=0; ii<list.Count;ii++)
{
int[] i = (int[])list[ii]

OracleConnection OC = new OracleConnection();
string strSQL = "INSERT INTO SHIPMENT_DETAIL VALUES" + "('" + i[0] + "','" + i[1] + "','" + i[2] + "','" + i[3] + "','" + i[4] + "','" + i[5] + "','" + i[6] + "','" + i[7] + "')";

OC.ConnectionString =
"user id=sctto;" +
"password=tiger;" +
"Data Source = test";

OracleCommand ORACmd = new OracleCommand(strSQL,OC);
OC.Open();

ORACmd.ExecuteNonQuery();

OC.Close();
}
}

上記のように現在コーティングしています。


引用返信 編集キー/
■5371 / inTopicNo.8)  Re[3]: DataGridの内容をSQLでINSERTしたい
□投稿者/ choir (1回)-(2007/07/11(Wed) 16:06:19)
No5348 (せんべい さん) に返信
> 2007/07/11(Wed) 11:42:26 編集(投稿者)

DataGridに併せて更新てことだと、こういうのも良いかなと。。。

SqlDataAdapter _adapter = new SqlDataAdapter();
_adapter.InsertCommand = new SqlCommand("INSERT INTO hoge (商品名, 金額) VALUES(@商品名, @金額");
_adapter.InsertCommand.Parameters.Add(@商品名, SqlDbType.NVarChar, 10, "商品名");
_adapter.InsertCommand.Parameters.Add(@金額, SqlDbType.Money, 0, "金額");
_adapter.InsertCommand.Connection = foo;
//_adapter.UpdateCommand = (更新が要るなら)
//_adapter.DeleteCommand = (削除が要るなら)

private void updateButton_Click(object sender, System.EventArgs e)
{	
 _adapter.Update(dt);
}

引用返信 編集キー/
■5372 / inTopicNo.9)  Re[7]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (52回)-(2007/07/11(Wed) 16:07:33)
2007/07/11(Wed) 16:12:43 編集(投稿者)

No5370 (テンツク さん) に返信

>2件以上あるときにINSERTしようとするとシステムエラーがおきてしまいます。
デバッグ実行はしてますか?
であれば、どこでどういうエラーが起きているのかを教えてください。

おそらく誤記?ですが
>i[7]
はないですよね?

引用返信 編集キー/
■5373 / inTopicNo.10)  Re[7]: DataGridの内容をSQLでINSERTしたい
□投稿者/ 魔界の仮面弁士 (340回)-(2007/07/11(Wed) 16:08:31)
No5370 (テンツク さん) に返信
> private void botton1_Click(object sender, System.EventArgs e)
botton (ぼっとん) ではなく、button (ボタン) かな、と。

> int[0] = Convert.ToInt32(textBox1);
textBox1 → textBox1.Text なのでは?

> string strSQL = "INSERT INTO SHIPMENT_DETAIL VALUES" + "('" + i[0] + "','"〜〜〜
動的に SQL を組み立てるのではなく、それぞれをパラメータ化して、
ORACmd.Parameters で指定するようにしましょう。
そうしないと、商品名に特殊な文字(「'」など)が含まれた場合の対策が面倒ですよ。

# あるいは、DataAdapter.Update という手もあるかも。


> システムエラーがおきてしまいます。なぜでしょう?
その「システムエラー」の詳細を教えてください。

それと……これから INSERT しようとしているデータが、既に Oracle 側に登録済みだった場合は、
どのように処理したいのでしょうか?
(条件如何では、INSERT ではなく、MERGE を用いた方が良いかも知れません)
引用返信 編集キー/
■5375 / inTopicNo.11)  Re[8]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (4回)-(2007/07/11(Wed) 16:29:30)
2007/07/11(Wed) 16:33:26 編集(投稿者)

みなさん、いろいろとありがとうございます。

検証してみたところ、最初の1回は複数件をINSERTしようとしてもちゃんと通るのですが、一度DataGridをClearして、また追加していったものをINSERTしようとすると、別の内容であってもエラーが出てしまい、INSERTされません。


ORACmd.ExecuteNonQuery();←エラーが出る場合はここで「システムエラーです」と出てきます。

引用返信 編集キー/
■5377 / inTopicNo.12)  Re[9]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (53回)-(2007/07/11(Wed) 16:37:42)
2007/07/11(Wed) 16:39:35 編集(投稿者)

No5375 (テンツク さん) に返信
> 検証してみたところ、最初の1回は複数件をINSERTしようとしてもちゃんと通るのですが、一度DataGridをClearして、また追加していったものをINSERTしようとすると、別の内容であってもエラーが出てしまい、INSERTされません。

で、エラーの場所と内容は?(#無視してください。)

DataGridのClear処理はボタン?
クリア処理に
list = new ArrayList();
を追加してみてください。完全に勘です。
としか言いようがないです^^;
引用返信 編集キー/
■5379 / inTopicNo.13)  Re[10]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (5回)-(2007/07/11(Wed) 17:00:05)
No5377 (じゃかるた さん) に返信
> 2007/07/11(Wed) 16:39:35 編集(投稿者)
>
> ■No5375 (テンツク さん) に返信
>>検証してみたところ、最初の1回は複数件をINSERTしようとしてもちゃんと通るのですが、一度DataGridをClearして、また追加していったものをINSERTしようとすると、別の内容であってもエラーが出てしまい、INSERTされません。
>
> で、エラーの場所と内容は?(#無視してください。)
>
> DataGridのClear処理はボタン?
> クリア処理に
> list = new ArrayList();
> を追加してみてください。完全に勘です。
> としか言いようがないです^^;

何度も何度もみなさん本当にすいません。

> list = new ArrayList();
これを試したところ、上手く別の内容でもINSERTしてくれました・・・・が、やはり複数件となると駄目なようで、最初の1件しかINSERTしてくれていない模様です。
引用返信 編集キー/
■5381 / inTopicNo.14)  Re[11]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (54回)-(2007/07/11(Wed) 17:48:51)
No5379 (テンツク さん) に返信
>ORACmd.ExecuteNonQuery();←エラーが出る場合はここで「システムエラーです」と出てきます。
エラーはココですか?
Exceptionをcatchしてエラー内容を見れればみてください。
たぶん二件目のsqlに問題あるのでしょう・・・勘です。
とりあえず2件目のint配列の中身を確認してください。
引用返信 編集キー/
■5382 / inTopicNo.15)  Re[12]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (7回)-(2007/07/11(Wed) 17:57:08)
No5381 (じゃかるた さん) に返信
> ■No5379 (テンツク さん) に返信
> >ORACmd.ExecuteNonQuery();←エラーが出る場合はここで「システムエラーです」と出てきます。
> エラーはココですか?
> Exceptionをcatchしてエラー内容を見れればみてください。
> たぶん二件目のsqlに問題あるのでしょう・・・勘です。
> とりあえず2件目のint配列の中身を確認してください。

1件目と2件目の配列の中身を確認しましたが、ちゃんと別のものが入っていました。

2件目のSQLに問題・・・・どのような問題があるのでしょうか?
引用返信 編集キー/
■5384 / inTopicNo.16)  Re[13]: DataGridの内容をSQLでINSERTしたい
□投稿者/ じゃかるた (55回)-(2007/07/11(Wed) 18:04:37)
2007/07/11(Wed) 18:07:59 編集(投稿者)

No5382 (テンツク さん) に返信
>2件目のSQLに問題・・・・どのような問題があるのでしょうか?
たとえばですが、データにnullとか、データレングスがオーバーとか、プライマリキー制約違反とか...

#明細Noがプライマリキーとか?勘です^^;
引用返信 編集キー/
■5385 / inTopicNo.17)  Re[14]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (9回)-(2007/07/11(Wed) 18:19:06)
No5384 (じゃかるた さん) に返信
> 2007/07/11(Wed) 18:07:59 編集(投稿者)
>
> ■No5382 (テンツク さん) に返信
> >2件目のSQLに問題・・・・どのような問題があるのでしょうか?
> たとえばですが、データにnullとか、データレングスがオーバーとか、プライマリキー制約違反とか...
>
> #明細Noがプライマリキーとか?勘です^^;

プライマリキーらしいですが、今回はそこは使わずに、明細b0からインクリメントしていってくれと後ろから言われました。

明細bフ列を行が増えるたびに+1させていきたいのですが、うまくインクリメントしてくれません・・・。
引用返信 編集キー/
■5386 / inTopicNo.18)  Re[15]: DataGridの内容をSQLでINSERTしたい
□投稿者/ テンツク (10回)-(2007/07/11(Wed) 18:41:54)
みなさん、いろいろお知恵を貸していただきありがとうございました!

無事解決し、実にうれしいです!!

また、何かあったとき是非ともよろしくお願いします〜

それでは失礼!
解決済み
引用返信 編集キー/
■5387 / inTopicNo.19)  Re[15]: DataGridの内容をSQLでINSERT
□投稿者/ いしだ (12回)-(2007/07/11(Wed) 18:47:21)
いしだ さんの Web サイト
2007/07/11(Wed) 18:48:09 編集(投稿者)

こんばんは。

1.インサートする値設定
2.button1_Click
3.インサートする値設定
4.button1_Click
5.button2_Click
という操作で5.でえらーが発生するのでしょうか?
そうであれば、明細bフ重複エラーじゃないでしょうか?

1.インサートする値設定
2.button1_Click
3.button2_Click
4.インサートする値設定
5.button1_Click
6.button2_Click
という操作で6.でえらーが発生するのであれば、button2_Clickの最後に
list.Clear();
を実行していないからのような気がします。

どのような操作をしてエラーが発生するか(SQLも)を示していただけると、回答しやすいかもしれません。

【編集】
既に解決済みでしたか。。。
引用返信 編集キー/
■5389 / inTopicNo.20)  Re[16]: DataGridの内容をSQLでINSERTしたい
 
□投稿者/ eternia (6回)-(2007/07/11(Wed) 19:01:40)
No5386 (テンツク さん) に返信
> みなさん、いろいろお知恵を貸していただきありがとうございました!
>
> 無事解決し、実にうれしいです!!
>
> また、何かあったとき是非ともよろしくお願いします〜
>
> それでは失礼!

解決したのであれば、
・何が原因だったのか?
・どのようにして解決したのか?
ぐらいは書いて頂いたほうが後で同じことで悩んだ人が助かります。

それに「なんか聞いてるうちに色々やってたらできました。ありがとう。」
だけではせっかく時間を割いてくれた方々に失礼だと思いませんか?

解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -