質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

48868閲覧

テーブルの中身が0だとエラーが発生してしまいます。

JAVA

総合スコア11

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/02/03 00:20

編集2016/02/03 02:29

NULLの場合だと次のページ遷移が行われないのですが・・・

visualbasic

1 2Imports System.Data 3 4Partial Class MasterPage 5 Inherits System.Web.UI.MasterPage 6 7 '商品点数と合計金額の表示 8 Public Sub Get_Summary(ByVal order_no As Integer) 9 'SELECTクエリのパラメータ設定 10 Dim args As DataSourceSelectArguments = New DataSourceSelectArguments() 11 '注文テーブルから数量合計と合計金額を取得する 12 Dim dataview As DataView = CType(SqlDataSource_order_summary.Select(args), DataView) 13 If dataview.Table.Rows(0).ItemArray.GetValue(0) Is DBNull.Value Then←ここでエラーが発生します。 14エラー文型 'System.IndexOutOfRangeException' の例外が System.Data.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした 15 16追加情報:位置 0 に行がありません。 17 'NULLの場合(レコードが存在しない) 18 Label_suyou.Text = 0 19 Label_gokei.Text = 0 20 Else 21 'NULLではない場合(レコードが存在する) 22 '伝票番号の最大値(+1) 23 Label_suyou.Text = dataview.Table.Rows(0).ItemArray.GetValue(1) 24 Label_gokei.Text = String.Format("{0:c}", dataview.Table.Rows(0).ItemArray.GetValue(2)) 25 End If 26 27 End Sub 28 29 Protected Sub Page_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed 30 'セッションオブジェクトの削除 31 Session.RemoveAll() 32 End Sub 33 34 35 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 36 37 If Session("order_no") Then 38 Get_Summary(0) 39 End If 40 41 End Sub 42End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsk

2016/02/03 00:44

```visualbasic の前のスペースを取って(行頭から```visualbasic) おわりの```も行頭に書いて、コードを整形していただけますか?
sho_cs

2016/02/03 00:46

こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました 「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
sk_3122

2016/02/03 02:19

他の方からも指摘がありますが、コードの整形をお願いします。 おそらく ```visualbasic の前に 2 つほど半角スペースが入っている為、整形がうまくいっていないのではないかと思います。 質問のタイトルの横に、編集履歴のリンクがあります。そこをクリックするとソースが表示されるので、コピーして、 ``` の前のスペースを覗いて編集し直してください。
JAVA

2016/02/03 02:30

お二方ご指摘ありがとうございました。 スペースが入ってしまいソースコード整形が出来かったそうです。
guest

回答1

0

IndexOutOfRangeException というのは、「配列やリストの最大添字より大きい添字」を指定した時に出るエラーです。
dataview.Table.Rows が 1 行もないのに dataview.Table.Rows(0) を参照しようとしているので、このエラーが出ているのだと思います。

なので、Rows(0) を参照する前に、まず Rows の件数をチェックします。
あと ItemArray も添字で参照しようとしてますね。これは 0 件のケースはあり得るでしょうか。
もしあるなら、そちらもチェックが必要ですかね。

vb

1If dataview.Table.Rows.Count <= 0 OrElse 2 dataview.Table.Rows(0).ItemArray.Length <= 0 OrElse 3 dataview.Table.Rows(0).ItemArray.GetValue(0) Is DBNull.Value Then 4 5 ' レコードが存在しない場合 6 ...

dataview や dataview.Table が NULL の可能性があるなら、そちらもチェックした方が良いと思います。
NULL はあり得ないというならいらないですが。
dataview Is Nothing dataview.Table Is Nothing

あとたしか、VB は
Or だと最初の条件で True になっても、次の条件も見に行ってしまうんじゃなかったかな。
Or ではなく OrElse を使ってください。

投稿2016/02/03 02:43

編集2016/02/03 02:45
sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk_3122

2016/02/03 02:46

というか「レコードがないかどうか」の判定なら dataview.Table.Rows.Count <= 0 だけで良い気がしますね・・・ ItemArray 見る必要ないんじゃないかな
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問