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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

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

Q&A

0回答

1618閲覧

VB.NETでOleDbCommandクラスを使用するSELECT分でのエラー

Shoujit2072

総合スコア0

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

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

0グッド

0クリップ

投稿2021/12/14 07:17

前提・実現したいこと

VB.NETでOleDbCommandクラスを使用するSELECT分を実行時に”指定されたキャストは有効ではありません”のエラーになります。

発生している問題・エラーメッセージ

指定されたキャストは有効ではありません

該当のソースコード

Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim prov As String = "****" Dim serverName As String = "*****" Dim dataBase As String = "******" Dim userid As String = "****" Dim pwd As String = "" Dim dread As OleDb.OleDbDataReader Dim str As String = String.Empty Try Using conn As New OleDb.OleDbConnection() conn.ConnectionString = " Provider = " & prov & ";Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Using cmd As New OleDb.OleDbCommand() cmd.Connection = conn cmd.CommandText = "SELECT * " & ControlChars.NewLine & "FROM [dbo].**** " & ControlChars.NewLine & "WHERE ****** BETWEEN ? AND ? " & ControlChars.NewLine & "ORDER BY ******* " & ControlChars.NewLine cmd.Parameters.Add("@CYUUMON_BANGOU_St", OleDb.OleDbType.Integer).Value = ***** cmd.Parameters.Add("@CYUUMON_BANGOU_End", OleDb.OleDbType.Integer).Value = ****** dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx1 As Integer, iIdx2 As Integer iIdx1 = dread.GetOrdinal("******") iIdx2 = dread.GetOrdinal("******") str &= "CYUUMON_BANGOU:" & dread.GetInt32(iIdx1) & Space(6) & "SEIZOU_LINE_NO:" & dread.GetString(iIdx2) & ControlChars.NewLine Loop End Using Label1.Text = str End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class

試したこと

接続は正常に出来ているのを確認しています。

補足情報(FW/ツールのバージョンなど)

Visual studio 2019

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/14 07:59 編集

とりあえず、どの行でエラーが起きているか確認してください。 [チュートリアル: Visual Studio を使用した Visual Basic コードのデバッグについて理解する] https://docs.microsoft.com/ja-jp/visualstudio/get-started/visual-basic/tutorial-debugger?toc=%2Fvisualstudio%2Fdebugger%2Ftoc.json&view=vs-2022 > Label1.Text = Err.Description Errオブジェクトからエラー情報を取得するのは古いやり方なのでやめましょう。詳細なエラー情報を取得するなら、Exceptionオブジェクトから取得してください。 Label1.Text = ex.ToString() の方が良いでしょう。 エラーの詳細が判ったら、質問を編集して追記してください。
Shoujit2072

2021/12/14 08:31

ありがとうございました。 str &= "CYUUMON_BANGOU:" & dread.GetInt32(iIdx1) & Space(6) & ⇒データ型と変数の型式の指定が問題でした。 str &= "CYUUMON_BANGOU:" &dread.GetString(iIdx1) & Space(6) & としたところ正常に動作はしましたが、逆にSQLでnumeric(4.0)のデータを抽出しようとした場合エラーが出ました。 データ型のエラーを解消したい場合どのような情報を探せばよろしいでしょうか。
KOZ6.0

2021/12/14 10:53

GetValue メソッドで object 型として取得し中身を確認してください みたところ DB は SQL Server ですよね? Imports System.Data.SqlClient としているのに、OleDB を使っているのは何故なんでしょう?
退会済みユーザー

退会済みユーザー

2021/12/15 00:51 編集

> データ型のエラーを解消したい場合どのような情報を探せばよろしいでしょうか。 だから最初にエラーの詳細を聞いているのですが。指摘した事くらいはやってください。 大抵は、エラーコードやエラーメッセージの一部でググれば情報は出てきますけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問