DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全4記事(1-4 表示) ] <<
0
>>
■34159
/ inTopicNo.1)
データセット定義ファイルからDataTable
▼
■
□投稿者/ ナンバー
一般人(2回)-(2019/02/25(Mon) 16:27:43)
環境/言語:[c# 6]
分類:[.NET]
データセット定義ファイル(xsdファイル)を利用して、DataTableを作成しました。
参考にしたのは下記のサイトになります。
https://www.ipentec.com/document/csharp-database-create-dataset
できたのは下記のURLのようになります。
https://mscdn.ipentec.com/document/image/csharp-database-create-dataset-05?maxwidth=1440
MyDataSet.xsdファイルのSimpleProductというDataTableができました。
----
ここからが知りたいことです。
1.
SimpleProductというDataTableをインスタンス化するには、このような方法をとりましたが
あってるでしょうか?
var dt = new DataTable();
dt = MyDataSet.SimpleProduct();
2.
Form上のボタンを押すたびに、
このDataTableに行を追加したいと思います。SimpleProductテーブルにはID(主キー)、ProductName、Priceと列情報があります。
dt.Rows.Add(dt.NewRow()); // ←ここでエラー発生
dt.[0]["id"] = "1";
dt.[0]["ProductName"] = "A";
dt.[0]["Price"] = "100";
とすると、
型 'System.Data.NoNullAllowedException' のハンドルされていない例外が System.Data.dll で発生しました
追加情報:列 'id' に nulls を使用することはできません。
というエラーメッセージが表示されます。idが主キーだからそのようにメッセージがでるのはわかる気がしますが、
行を追加するにはどのようにすればいいでしょうか?
マルチポストを報告
Javascriptを有効にしてください
この投稿がマルチポスト(全く同じ内容の投稿が別の掲示板に投稿されている)の場合は、以下のフォームをご利用いただくと、報告の投稿が簡単に行えます。
このフォームに必要事項を入力後、「返信フォームに入力する」ボタンをクリックすると、このページの下にある
返信フォーム
の項目が自動的に埋まります。実際に投稿するには、その後、返信フォームの「送信」ボタンをクリックしてください。
このフォームを利用しても返信フォームが埋まるだけですので、後で書き直してから投稿することもできます。
「マルチポストされている場所」には、マルチポストされている場所のURLを入力してください。複数のURLを改行区切りで入力することができます。
マルチポストされている場所
オプション
マルチポスト先の投稿が、別人によるいたずらである可能性が高い
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34161
/ inTopicNo.2)
Re[1]: データセット定義ファイルからDataTable
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1203回)-(2019/02/25(Mon) 17:15:40)
■
No34159
に返信(ナンバーさんの記事)
> var dt = new DataTable();
> dt = MyDataSet.SimpleProduct();
dt への代入を 2 回行っているのは何故でしょうか?
たとえば普段、
string s = ""; // 1 回目の代入
s = textBox1.Text; // 2 回目の代入
と書くのではなく、
string s = textBox1.Text; // 1 回目の代入
と書きますよね。
> 1.SimpleProductというDataTableをインスタンス化するには、このような方法をとりましたが
> あってるでしょうか?
そもそも『dt = MyDataSet.SimpleProduct();』だとコンパイルエラーになりませんでしたか?
// 案1
var ds = new MyDataSet();
var dt = ds.SimpleProduct;
// 案2
var dt = new MyDataSet().SimpleProduct;
// 案3
var dt = new MyDataSet.SimpleProductDataTable();
お奨めは 案1 ですが、どの方法でも構いません。
ただし 案3 の方法だと、dt.DataSet が null になる点にご注意ください。
上記の dt は System.Data.DataTable 型ではなく、それを継承した
プロジェクトの名前空間.MyDataSet.SimpleProductDataTable 型である点が肝です。
> 2.
> Form上のボタンを押すたびに、
> このDataTableに行を追加したいと思います。
(1) MyDataSet.xsd を含むプロジェクトをコンパイルします。
(2) フォームデザイナーを開くと、ツールボックス先頭に "MyDataSet" が現れるので、
それを Form1 にドロップします。"myDataSet1" が貼られるはず。
(3) button1_Click に以下を記述します。
this.myDataSet1.SimpleProduct.AddSimpleProductRow("1", "A", 100);
今回の場合、id 列が主キー設定されているようなので、
同じ id を追加で登録しようとすると、キー重複で制約エラーになります。
(ただし DataSet の EnforceConstraints を false にしていた場合は、制約エラーが無視されます)
> dt.Rows.Add(dt.NewRow()); // ←ここでエラー発生
> dt.[0]["id"] = "1";
> dt.[0]["ProductName"] = "A";
> dt.[0]["Price"] = "100";
「dt.Rows.Add(dt.NewRow());」は実行時エラーで済みそうですが、
その後の「dt.[0]」という構文は、そもそもコンパイルエラーになりませんか?
それと、Price 列が 数値(int とか decimal とか)ではなく
数字(string) な点も気にかかります。
列のデータ型は、DataSet デザイナーで列を選択して、
DataType プロパティから確認できますので、確認しておいてください。
> 行を追加するにはどのようにすればいいでしょうか?
【型付の DataTable に行を追加する場合】
// 案1
dt.AddSimpleProductRow("1", "A", 100);
// 案2
var newRow = dt.NewSimpleProductRow();
newRow.id = "1";
newRow.ProductName = "A";
newRow.Price = 100;
dt.AddSimpleProductRow(newRow);
【素の DataTable に行を追加する場合】
// 案1
dt.Rows.Add("1", "A", 100);
// 案2
DataRow newRow = dt.NewRow();
newRow["id"] = "1";
newRow["ProductName"] = "A";
newRow["Price"] = 100;
dt.Rows.Add(newRow);
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34162
/ inTopicNo.3)
Re[2]: データセット定義ファイルからDataTable
▲
▼
■
□投稿者/ ナンバー
一般人(5回)-(2019/02/26(Tue) 14:10:24)
>そもそも『dt = MyDataSet.SimpleProduct();』だとコンパイルエラーになりませんでしたか?
はい、コンパイルエラーになりませんでした。
>上記の dt は System.Data.DataTable 型ではなく、それを継承した
>プロジェクトの名前空間.MyDataSet.SimpleProductDataTable 型である点が肝です。
なるほど、よく理解できました。
>「dt.Rows.Add(dt.NewRow());」は実行時エラーで済みそうですが、
>その後の「dt.[0]」という構文は、そもそもコンパイルエラーになりませんか?
コンパイルエラーにはならず、実行時にエラーがでました。
無事に疑問だったことが解決されました。ありがとうございます。
解決
済
み!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34163
/ inTopicNo.4)
Re[3]: データセット定義ファイルからDataTable
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1204回)-(2019/02/26(Tue) 16:41:17)
■
No34162
に返信(ナンバーさんの記事)
> >そもそも『dt = MyDataSet.SimpleProduct();』だとコンパイルエラーになりませんでしたか?
> はい、コンパイルエラーになりませんでした。
それは妙ですね。
「dt = new MyDataSet.SimpleProduct();」や
「dt = myDataSet.SimpleProduct;」ならばまだしも、
「dt = MyDataSet.SimpleProduct();」は、通常ならエラーになるはずなのですが。
エラーにならなかったのであれば、MyDataSet.cs に対して、
static な「SimpleProduct メソッド」を追加していたのかもしれません。
> >「dt.Rows.Add(dt.NewRow());」は実行時エラーで済みそうですが、
> >その後の「dt.[0]」という構文は、そもそもコンパイルエラーになりませんか?
> コンパイルエラーにはならず、実行時にエラーがでました。
「dt.[0]」でなく
「dt[0]」だったということはないですか?
「dt.[0]」な記述は、C# では構文エラー『識別子がありません』となるはずです。
「dt[0]」や「dt.Rows[0]」という構文ならありえますが。
もしくは、コンパイルに失敗した後の
『ビルド エラーが発生しました。続行して、最後に成功したビルドを実行しますか?』
の警告を無視して実行していたとか…。
解決
済
み!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
このトピックをツリーで一括表示
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No34162に返信(ナンバーさんの記事) > >そもそも『dt = MyDataSet.SimpleProduct();』だとコンパイルエラーになりませんでしたか? > > はい、コンパイルエラーになりませんでした。 > > >上記の dt は System.Data.DataTable 型ではなく、それを継承した > >プロジェクトの名前空間.MyDataSet.SimpleProductDataTable 型である点が肝です。 > > なるほど、よく理解できました。 > > >「dt.Rows.Add(dt.NewRow());」は実行時エラーで済みそうですが、 > >その後の「dt.[0]」という構文は、そもそもコンパイルエラーになりませんか? > > コンパイルエラーにはならず、実行時にエラーがでました。 > > 無事に疑問だったことが解決されました。ありがとうございます。
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-