• ベストアンサー

DBNULLについて

chibita_papaの回答

  • ベストアンサー
回答No.1

rd.Item("数")が Nullだからでしょうね If rd.Read andalso Not IsDBNull(rd.Item("数")) Then でどうでしょうか。

fon4203
質問者

お礼

できました。 ありがとうございます。

関連するQ&A

  • SQL文のSELECTで読み、配列に取り込み

    SQL文のSELECTで読み、配列に取り込みたく、下記のプログラム作成しましたがエラー『ExecuteReader: Connection プロパティは初期化されていません。』が出て困っています。 どこで、どのように設定すればよいのでしょうか? Private Function Sosiki_kouzou() As String()() Dim Sosiki_tbl2(3)() As String Dim Dread As Data.OleDb.OleDbDataReader Dim Com As New Data.OleDb.OleDbCommand Com = New Data.OleDb.OleDbCommand("SELECT ORG_ID,SHORT_OU_JA, PARENT_ORG_ID FROM meldandy.WF_ORGANIZATION") Dread = Com.ExecuteReader Dim Cnt1 As Integer Cnt1 = 0 Do While (Dread.Read()) Cnt1 = Cnt1 + 1 Sosiki_tbl2(1)(Cnt1) = Dread.GetString(1) Sosiki_tbl2(2)(Cnt1) = Dread.GetString(2) Sosiki_tbl2(3)(Cnt1) = Dread.GetString(3) Loop Return Sosiki_tbl2 End Function VisualStadioを始めたばかりの素人です。 的外れかも知れませんがよろしくお願いいたします。

  • VB.NETでパラメータクエリを使用してAccessに値を設定

    こんにちは。 社員番号をNumとして、ボタンクリック時に社員番号が100099の人の名前を抽出したいのですが、「("?Num",'100099')」のカンマで「式が必要です。」となってしまいます。テキストの通りにやっているのですが、うまくいきません。テキストに載ってないこととしては、社員番号がテキスト型なので、「’」で囲んでみました。 どうすれば正しく実行できるでしょうか?以下はコーディングの一部です。 よろしくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Name As String Dim cm As OleDb.OleDbCommand Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\VB_DB\SampleDB2.mdb;Persist Security Info=False") 'パラメータクエリを作成する cm = New OleDb.OleDbCommand("SELECCT 氏名 FROM 社員 " _ & "WHERE 社員番号=?Num", cn) 'パラメータクエリで使う値を設定する cm.Parameters.Clear() cm.Parameters.Add("?Num",'100099') 'パラメータクエリを実行する Name = cm.ExecuteScalar()

  • VB2010 SQLのUPDATE文エラー

    VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub

  • VB2005で、Structureの配列を返すプログラムを以下のように書きたい

    VB2005で、Structureの配列を返すプログラムを以下のように書きたいのですが、そもそもVB6しか使ったことが無いもので、以下のような素数の結果を返すこのプログラムの書き方はVB2005らしいでしょうか? Module Module1 Public Structure SosuuStatus Public num As Integer Public status As String End Structure Class Sosuu Function SosuuCheck(ByVal st As Integer, ByVal ed As Integer) As SosuuStatus() Dim i As Integer, j As Integer Dim sosuu(0 To ed - st) As SosuuStatus Dim cnt As Integer = 0 For i = st To ed sosuu(cnt).num = i sosuu(cnt).status = "" '初期化 If 1 = i Then sosuu(cnt).status = "素数ではない" ElseIf 0 = (i Mod 2) Then sosuu(cnt).status = "素数ではない" Else For j = 3 To Math.Sqrt(ed) If 0 = (i / j) Then sosuu(cnt).status = "素数ではない" End If Next j End If If sosuu(cnt).status = "" Then sosuu(cnt).status = "素数である" End If cnt = cnt + 1 Next i SosuuCheck = sosuu End Function End Class End Module

  •  お世話になっています。SQLについての質問です。

     お世話になっています。SQLについての質問です。  VB.netでACCESSに接続しデータベースを参照しているのですが "select max([項目1]) AS N_MAXKEY from [テーブル1]" を実行した際、N_MAXKEYの値をGetInt32(0)で取得できませんでした。 N_MAXKEYの値をどのように取得するか方法をご享受ください。宜しくお願いします。 以下、作成したソースコードの一部です。尚、[項目1]は整数型で設定されています。 ======================== Public G_DATABASES As System.Data.OleDb.OleDbConnection  ~(省略)~ Dim wrk_sql As String 'SQL 文字列変数 Dim cmnd As New System.Data.OleDb.OleDbCommand Dim dr As System.Data.OleDb.OleDbDataReader Dim intTest As Integer = 0  ~(省略)~  wrk_sql = "select max([項目1]) AS N_MAXKEY from [テーブル1]"    cmnd.Connection = G_DATABASES  cmnd.CommandType = CommandType.Text  cmnd.CommandText = wrk_sql  dr = cmnd.ExecuteReader()  intTest = dr.GetInt32(0) ’値を取得できない(´・ω・`) ========================

  • VB2013でVB6でのDBは利用可能?

    VB4.0で作成してましたMicrosoft.Jet.OLEDB.4.0のDBをSQLSERVER2012で作成したDBに移行したいのですが VB2013では読み込めないのでしょうか? データーベースエクスプローラーでは中身の確認はできるのですが プログラムで走らせるとSqlDataAdapter(sql, cnStr)のところでエラー下記[エラー結果]とになります Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim cnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\SERVER\DB名.mdb" Dim sql As String sql = "SELECT * FROM テーブル名" Dim dt1 As New DataTable Dim da1 As New SqlDataAdapter(sql, cnStr) Try da1.Fill(dt1) DataGridView1.DataSource = dt1 Catch ex As Exception End Try End Sub [エラー結果] 型 'System.ArgumentException' のハンドルされていない例外が System.Data.dll で発生しました 追加情報:キーワードはサポートされていません : 'provider' 以前のmdbファイルが読み込める方法はないのでしょうか?

  • VB2010でCSV取込

    VB2010とAccessを使用しています。 あるCSVファイルからACCESSへデータ取り込みをしようとして CSVをデータテーブルに代入するコードを考えているのですが 下記のコードでは『FROM句』のエラーのようでうまく作動しません? ご教授お願いします。 Private Sub ToolMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolMenu.Click Dim OFD As New OpenFileDialog OFD.FileName = "" OFD.InitialDirectory = "\\10.20.100.35\data\LOG\" OFD.Filter = "CSVファイル(*.csv)|*.csv|すべてファイル(*.*)|*.*" OFD.FilterIndex = 1 OFD.Title = "取り込むCSVファイルを選択してください" OFD.RestoreDirectory = True OFD.CheckFileExists = True OFD.CheckPathExists = True If OFD.ShowDialog() = DialogResult.OK Then Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection Dim CSVFileName As String = System.IO.Path.Combine(OFD.InitialDirectory, "aaa.csv") OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OFD.InitialDirectory & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try End If End Sub

  • vb.net で ADO でアクセスのテーブル

    アクセスのテーブルのレコードの数を取得したいのですが コードがわからないので続きを教えていただけますか? Imports System.Data.OleDb Sub test() Dim oleConn As OleDbConnection Dim oleCmd As OleDbCommand Dim oleAdp As OleDbDataAdapter oleConn = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Database1.accdb;") oleCmd = oleConn.CreateCommand() oleCmd.CommandText = "SELECT * FROM テーブル1" oleAdp = New OleDbDataAdapter(oleCmd) 'MsgBox oleCmd.??? End Sub までできたのですが、ここからどうすれば数を取得できますか?

  • VB2005でACCESSのADO.NETでのテーブル名取得

    VB2005 ACCESSのテーブル名を取得したいのですが、方法をご教示ください。以下のところで悩んでいます。 OpenFileDialog1.Filter = "アクセス ファイル (*.mdb)|*.mdb" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Dim St As String Dim Cn As New System.Data.OleDb.OleDbConnection Dim SQL As System.Data.OleDb.OleDbCommand Dim UserID As String = "Admin" Dim Password As String = "" Dim MDBFile As String = OpenFileDialog1.FileName Dim N As String = Microsoft.VisualBasic.Right(MDBFile, 9) St = "Provider=""Microsoft.Jet.OLEDB.4.0"";" St &= "Data Source=""" & MDBFile & """;" St &= "User ID=" & UserID & ";" St &= "Jet OLEDB:Database Password=" & Password Cn.ConnectionString = St SQL = Cn.CreateCommand    Cn.Open() この後テーブル名までたどり着けません DataTable  Cn.GetSchema Cn.GetOleDbSchemaTable( "restrictions") などヘルプなどから試みていますが、これらのコーディング法がわかりません。 テーブル名がわかっている(サンプルのPubs の "Publisher")場合はデータセットからはフィールド名が取得できたのですが・・・ よろしくお願いいたします。

  • VB.netでのwin32api呼び出し

    VB.netでwin32apiを呼び出したが変数にデータが正しくセットされない vb6.0のプログラムをvb.netに移植作業しています。 vb.netで機器との通信を行うためwinapi32で作られたドライバdllをインポートしたのですが受信データが正常に受け取れません。もう1週間も悩み続けています。 詳しい方お助けください。 //win32api側// DWORD Receive(HANDLE handle,PBYTE pbReceiveBuffer,WORD wBufferLength, _ PWORD pwReceiveLength,PDWORD pdwErrCode); //VB側// <DllImport("Des_DLL", CharSet:=CharSet.Auto)> _ Public Function Receive(ByVal hPath As Intptr, ByRef ReceiveBuffer As IntPtr, _ ByVal ReceiveBuffLength As Ushort ByRef ReceiveLength As Ushort, _ ByRef lErrCode As Uint) As Uint End Function Dim rd_buf(1018) As Byte Dim rbf_l As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(rd_buf)) 'アンマネージメモリ 確保 Marshal.Copy(rbf_l, rd_buf, 0, rd_buf.Length) 'アンマネージメモリからマネージメモリにコピー ret = Receive(Path, rbf_l, rdbuffer_length, rd_length, ErrCode) Call des_datawrite(rd_buf, rd_length, 2) ' 受信データの書き込み For i = 0 To rd_length - 1 ' 受信データセット DES.rd_buf(DES.rd_cnt) = rd_buf(i) DES.rd_cnt = DES.rd_cnt + 1 Next i DesRD_Normal = True Marshal.FreeCoTaskMem(rbf_l) End Function Receive()は機器からの情報吸い上げレスポンス関数です。 Public Sub des_datawrite(ByVal wt_data() As Byte, ByVal length As Integer, ByVal Mode As Integer) Dim free_num As Integer Dim i As Integer Dim cv_buf As String cv_buf = "" For i = 0 To length - 1 cv_buf = cv_buf & Microsoft.VisualBasic.Right("00" & Hex(wt_data(i)), 2) & " " Next i free_num = FreeFile() FileOpen(free_num, GetAppPath() & DES_DATA, OpenMode.Append) If Mode = 1 Then Print(free_num, "[<-sd(" & DateTime.Now.ToString("yyyyMMddHHmm") & ")]" & Mid (cv_buf, 1, Len(cv_buf) - 1)) ElseIf Mode = 2 Then ElseIf Mode = 2 Then Print(free_num, "[->rd(" & DateTime.Now.ToString("yyyyMMddHHmm") & ")]" & Mid(cv_buf, 1, Len(cv_buf) - 1)) End If FileClose(free_num) End Sub