• Skip to main content
  • Home

sae-suki-blog. - source

source – JV-LinkをC#で使ってみる(WinForms版) ~6.JV-Dataの内容を読み出す 応用編(1+2)~

2018-10-18 by さえきさん

目次

  • basADOUtility.cs
  • Form1.cs

basADOUtility.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data;           // データベースへの接続に必要
using System.Data.OleDb;     // データベースへの接続に必要
using System.Diagnostics;    // Debug クラス使用のために必要
using static JVData_Struct;  // JVData_Struct クラス使用のために必要

class basADOUtility
{
    //------------------------------------------------------------------------
    //  レース詳細構造体の情報をJV-Dataデータセットに格納
    //------------------------------------------------------------------------
    // [引数]
    //   raceDat      = レース詳細構造体
    //   jvdds        = JV-Dataデータセット
    //------------------------------------------------------------------------
    public static void SetJVDataRaceDataSet(JV_RA_RACE raceDat, dynamic jvdds)
    {
        DataRow dr;     // データ1行分の各格納領域
        bool bnr;       // 新しい行作成フラグ 作成時:True

        // 値の初期化
        bnr = false;

        // 格納済みデータから主キーが同じ行を検索する
        dr = jvdds.RACE.FindByYearMonthDayJyoCDKaijiNichijiRaceNum(
                            raceDat.id.Year,
                            raceDat.id.MonthDay,
                            raceDat.id.JyoCD,
                            raceDat.id.Kaiji,
                            raceDat.id.Nichiji,
                            raceDat.id.RaceNum);

        // 主キーの同じデータが存在したか否か
        if (dr == null)
        {
            // 存在しなかった場合、新しいRowを作成する
            dr = jvdds.RACE.NewRow();
            // 作成フラグをセット
            bnr = true;
            // 主キーのセット
            dr[jvdds.RACE.YearColumn] = raceDat.id.Year;           // 開催年
            dr[jvdds.RACE.MonthDayColumn] = raceDat.id.MonthDay;   // 開催月日
            dr[jvdds.RACE.JyoCDColumn] = raceDat.id.JyoCD;         // 競馬場コード
            dr[jvdds.RACE.KaijiColumn] = raceDat.id.Kaiji;         // 開催回[第N回]
            dr[jvdds.RACE.NichijiColumn] = raceDat.id.Nichiji;     // 開催日目[N日目]
            dr[jvdds.RACE.RaceNumColumn] = raceDat.id.RaceNum;     // レース番号
        }

        // データのセット
        dr[jvdds.RACE.RecordSpecColumn] = raceDat.head.RecordSpec;                   // レコード種別
        dr[jvdds.RACE.DataKubunColumn] = raceDat.head.DataKubun;                     // データ区分
        dr[jvdds.RACE.MakeDateColumn] = raceDat.head.MakeDate.Year +
                                        raceDat.head.MakeDate.Month +
                                        raceDat.head.MakeDate.Day;                   // データ作成年月日
        dr[jvdds.RACE.YoubiCDColumn] = raceDat.RaceInfo.YoubiCD;                     // 曜日コード
        dr[jvdds.RACE.TokuNumColumn] = raceDat.RaceInfo.TokuNum;                     // 特別競走番号
        dr[jvdds.RACE.HondaiColumn] = raceDat.RaceInfo.Hondai;                       // 競走名本題
        dr[jvdds.RACE.FukudaiColumn] = raceDat.RaceInfo.Fukudai;                     // 競走名副題
        dr[jvdds.RACE.KakkoColumn] = raceDat.RaceInfo.Kakko;                         // 競走名カッコ内
        dr[jvdds.RACE.HondaiEngColumn] = raceDat.RaceInfo.HondaiEng;                 // 競走名本題欧字
        dr[jvdds.RACE.FukudaiEngColumn] = raceDat.RaceInfo.FukudaiEng;               // 競走名副題欧字
        dr[jvdds.RACE.KakkoEngColumn] = raceDat.RaceInfo.KakkoEng;                   // 競走名カッコ内欧字
        dr[jvdds.RACE.Ryakusyo10Column] = raceDat.RaceInfo.Ryakusyo10;               // 競走名略称10字
        dr[jvdds.RACE.Ryakusyo6Column] = raceDat.RaceInfo.Ryakusyo6;                 // 競走名略称6字
        dr[jvdds.RACE.Ryakusyo3Column] = raceDat.RaceInfo.Ryakusyo3;                 // 競走名略称3字
        dr[jvdds.RACE.KubunColumn] = raceDat.RaceInfo.Kubun;                         // 競走名区分
        dr[jvdds.RACE.NkaiColumn] = raceDat.RaceInfo.Nkai;                           // 重賞回次[第N回]
        dr[jvdds.RACE.GradeCDColumn] = raceDat.GradeCD;                              // グレードコード
        dr[jvdds.RACE.GradeCDBeforeColumn] = raceDat.GradeCDBefore;                  // 変更前グレードコード
        dr[jvdds.RACE.SyubetuCDColumn] = raceDat.JyokenInfo.SyubetuCD;               // 競走種別コード
        dr[jvdds.RACE.KigoCDColumn] = raceDat.JyokenInfo.KigoCD;                     // 競走記号コード
        dr[jvdds.RACE.JyuryoCDColumn] = raceDat.JyokenInfo.JyuryoCD;                 // 重量種別コード
        dr[jvdds.RACE.JyokenCD1Column] = raceDat.JyokenInfo.JyokenCD[0];             // 競走条件コード1
        dr[jvdds.RACE.JyokenCD2Column] = raceDat.JyokenInfo.JyokenCD[1];             // 競走条件コード2
        dr[jvdds.RACE.JyokenCD3Column] = raceDat.JyokenInfo.JyokenCD[2];             // 競走条件コード3
        dr[jvdds.RACE.JyokenCD4Column] = raceDat.JyokenInfo.JyokenCD[3];             // 競走条件コード4
        dr[jvdds.RACE.JyokenCD5Column] = raceDat.JyokenInfo.JyokenCD[4];             // 競走条件コード5
        dr[jvdds.RACE.JyokenNameColumn] = raceDat.JyokenName;                        // 競走条件名称
        dr[jvdds.RACE.KyoriColumn] = raceDat.Kyori;                                  // 距離
        dr[jvdds.RACE.KyoriBeforeColumn] = raceDat.KyoriBefore;                      // 変更前距離
        dr[jvdds.RACE.TrackCDColumn] = raceDat.TrackCD;                              // トラックコード
        dr[jvdds.RACE.TrackCDBeforeColumn] = raceDat.TrackCDBefore;                  // 変更前トラックコード
        dr[jvdds.RACE.CourseKubunCDColumn] = raceDat.CourseKubunCD;                  // コース区分
        dr[jvdds.RACE.CourseKubunCDBeforeColumn] = raceDat.CourseKubunCDBefore;      // 変更前コース区分
        dr[jvdds.RACE.Honsyokin1Column] = raceDat.Honsyokin[0];                      // 本賞金1
        dr[jvdds.RACE.Honsyokin2Column] = raceDat.Honsyokin[1];                      // 本賞金2
        dr[jvdds.RACE.Honsyokin3Column] = raceDat.Honsyokin[2];                      // 本賞金3
        dr[jvdds.RACE.Honsyokin4Column] = raceDat.Honsyokin[3];                      // 本賞金4
        dr[jvdds.RACE.Honsyokin5Column] = raceDat.Honsyokin[4];                      // 本賞金5
        dr[jvdds.RACE.Honsyokin6Column] = raceDat.Honsyokin[5];                      // 本賞金6
        dr[jvdds.RACE.Honsyokin7Column] = raceDat.Honsyokin[6];                      // 本賞金7
        dr[jvdds.RACE.HonsyokinBefore1Column] = raceDat.HonsyokinBefore[0];          // 変更前本賞金1
        dr[jvdds.RACE.HonsyokinBefore2Column] = raceDat.HonsyokinBefore[1];          // 変更前本賞金2
        dr[jvdds.RACE.HonsyokinBefore3Column] = raceDat.HonsyokinBefore[2];          // 変更前本賞金3
        dr[jvdds.RACE.HonsyokinBefore4Column] = raceDat.HonsyokinBefore[3];          // 変更前本賞金4
        dr[jvdds.RACE.HonsyokinBefore5Column] = raceDat.HonsyokinBefore[4];          // 変更前本賞金5
        dr[jvdds.RACE.Fukasyokin1Column] = raceDat.Fukasyokin[0];                    // 付加賞金1
        dr[jvdds.RACE.Fukasyokin2Column] = raceDat.Fukasyokin[1];                    // 付加賞金2
        dr[jvdds.RACE.Fukasyokin3Column] = raceDat.Fukasyokin[2];                    // 付加賞金3
        dr[jvdds.RACE.Fukasyokin4Column] = raceDat.Fukasyokin[3];                    // 付加賞金4
        dr[jvdds.RACE.Fukasyokin5Column] = raceDat.Fukasyokin[4];                    // 付加賞金5
        dr[jvdds.RACE.FukasyokinBefore1Column] = raceDat.FukasyokinBefore[0];        // 変更前付加賞金1
        dr[jvdds.RACE.FukasyokinBefore2Column] = raceDat.FukasyokinBefore[1];        // 変更前付加賞金2
        dr[jvdds.RACE.FukasyokinBefore3Column] = raceDat.FukasyokinBefore[2];        // 変更前付加賞金3
        dr[jvdds.RACE.HassoTimeColumn] = raceDat.HassoTime;                          // 発走時刻
        dr[jvdds.RACE.HassoTimeBeforeColumn] = raceDat.HassoTimeBefore;              // 変更前発走時刻
        dr[jvdds.RACE.TorokuTosuColumn] = raceDat.TorokuTosu;                        // 登録頭数
        dr[jvdds.RACE.SyussoTosuColumn] = raceDat.SyussoTosu;                        // 出走頭数
        dr[jvdds.RACE.NyusenTosuColumn] = raceDat.NyusenTosu;                        // 入線頭数
        dr[jvdds.RACE.TenkoCDColumn] = raceDat.TenkoBaba.TenkoCD;                    // 天候コード
        dr[jvdds.RACE.SibaBabaCDColumn] = raceDat.TenkoBaba.SibaBabaCD;              // 芝馬場状態コード
        dr[jvdds.RACE.DirtBabaCDColumn] = raceDat.TenkoBaba.DirtBabaCD;              // ダート馬場状態コード
        dr[jvdds.RACE.LapTime1Column] = raceDat.LapTime[0];                          // ラップタイム1
        dr[jvdds.RACE.LapTime2Column] = raceDat.LapTime[1];                          // ラップタイム2
        dr[jvdds.RACE.LapTime3Column] = raceDat.LapTime[2];                          // ラップタイム3
        dr[jvdds.RACE.LapTime4Column] = raceDat.LapTime[3];                          // ラップタイム4
        dr[jvdds.RACE.LapTime5Column] = raceDat.LapTime[4];                          // ラップタイム5
        dr[jvdds.RACE.LapTime6Column] = raceDat.LapTime[5];                          // ラップタイム6
        dr[jvdds.RACE.LapTime7Column] = raceDat.LapTime[6];                          // ラップタイム7
        dr[jvdds.RACE.LapTime8Column] = raceDat.LapTime[7];                          // ラップタイム8
        dr[jvdds.RACE.LapTime9Column] = raceDat.LapTime[8];                          // ラップタイム9
        dr[jvdds.RACE.LapTime10Column] = raceDat.LapTime[9];                         // ラップタイム10
        dr[jvdds.RACE.LapTime11Column] = raceDat.LapTime[10];                        // ラップタイム11
        dr[jvdds.RACE.LapTime12Column] = raceDat.LapTime[11];                        // ラップタイム12
        dr[jvdds.RACE.LapTime13Column] = raceDat.LapTime[12];                        // ラップタイム13
        dr[jvdds.RACE.LapTime14Column] = raceDat.LapTime[13];                        // ラップタイム14
        dr[jvdds.RACE.LapTime15Column] = raceDat.LapTime[14];                        // ラップタイム15
        dr[jvdds.RACE.LapTime16Column] = raceDat.LapTime[15];                        // ラップタイム16
        dr[jvdds.RACE.LapTime17Column] = raceDat.LapTime[16];                        // ラップタイム17
        dr[jvdds.RACE.LapTime18Column] = raceDat.LapTime[17];                        // ラップタイム18
        dr[jvdds.RACE.LapTime19Column] = raceDat.LapTime[18];                        // ラップタイム19
        dr[jvdds.RACE.LapTime20Column] = raceDat.LapTime[19];                        // ラップタイム20
        dr[jvdds.RACE.LapTime21Column] = raceDat.LapTime[20];                        // ラップタイム21
        dr[jvdds.RACE.LapTime22Column] = raceDat.LapTime[21];                        // ラップタイム22
        dr[jvdds.RACE.LapTime23Column] = raceDat.LapTime[22];                        // ラップタイム23
        dr[jvdds.RACE.LapTime24Column] = raceDat.LapTime[23];                        // ラップタイム24
        dr[jvdds.RACE.LapTime25Column] = raceDat.LapTime[24];                        // ラップタイム25
        dr[jvdds.RACE.SyogaiMileTimeColumn] = raceDat.SyogaiMileTime;                // 障害マイルタイム
        dr[jvdds.RACE.HaronTimeS3Column] = raceDat.HaronTimeS3;                      // 前3ハロンタイム
        dr[jvdds.RACE.HaronTimeS4Column] = raceDat.HaronTimeS4;                      // 前4ハロンタイム
        dr[jvdds.RACE.HaronTimeL3Column] = raceDat.HaronTimeL3;                      // 後3ハロンタイム
        dr[jvdds.RACE.HaronTimeL4Column] = raceDat.HaronTimeL4;                      // 後4ハロンタイム
        dr[jvdds.RACE.Corner1Column] = raceDat.CornerInfo[0].Corner;                 // コーナー通過順1コーナー
        dr[jvdds.RACE.Syukaisu1Column] = raceDat.CornerInfo[0].Syukaisu;             // コーナー通過順1周回数
        dr[jvdds.RACE.Jyuni1Column] = raceDat.CornerInfo[0].Jyuni;                   // コーナー通過順1各通過順位
        dr[jvdds.RACE.Corner2Column] = raceDat.CornerInfo[1].Corner;                 // コーナー通過順2コーナー
        dr[jvdds.RACE.Syukaisu2Column] = raceDat.CornerInfo[1].Syukaisu;             // コーナー通過順2周回数
        dr[jvdds.RACE.Jyuni2Column] = raceDat.CornerInfo[1].Jyuni;                   // コーナー通過順2各通過順位
        dr[jvdds.RACE.Corner3Column] = raceDat.CornerInfo[2].Corner;                 // コーナー通過順3コーナー
        dr[jvdds.RACE.Syukaisu3Column] = raceDat.CornerInfo[2].Syukaisu;             // コーナー通過順3周回数
        dr[jvdds.RACE.Jyuni3Column] = raceDat.CornerInfo[2].Jyuni;                   // コーナー通過順3各通過順位
        dr[jvdds.RACE.Corner4Column] = raceDat.CornerInfo[3].Corner;                 // コーナー通過順4コーナー
        dr[jvdds.RACE.Syukaisu4Column] = raceDat.CornerInfo[3].Syukaisu;             // コーナー通過順4周回数
        dr[jvdds.RACE.Jyuni4Column] = raceDat.CornerInfo[3].Jyuni;                   // コーナー通過順4各通過順位
        dr[jvdds.RACE.RecordUpKubunColumn] = raceDat.RecordUpKubun;                  // レコード更新区分

        // 新しい行の場合、jvddsに行を追加
        if (bnr == true)
        {
            jvdds.RACE.Rows.Add(dr);
        }
    }
    //------------------------------------------------------------------------
    //  JV-Dataデータセットのレース詳細をJV-Data構造体に格納
    //------------------------------------------------------------------------
    // [引数]
    //   dr            = レース詳細[一件]
    //   raceDat       = レース詳細構造体
    //------------------------------------------------------------------------
    public static void SetJVDataRaceStructure(DataRow dr, ref JV_RA_RACE raceDat)
    {
        // 構造体の配列の初期化
        raceDat.Initialize();
        raceDat.JyokenInfo.Initialize();

        // データのセット
        raceDat.head.RecordSpec = dr[0].ToString();              // レコード種別
        raceDat.head.DataKubun = dr[1].ToString();               // データ区分
        string str1 = dr[2].ToString();
        raceDat.head.MakeDate.SetDataB(Str2Byte(ref str1));      // データ作成年月日
        raceDat.id.Year = dr[3].ToString();                      // 開催年
        raceDat.id.MonthDay = dr[4].ToString();                  // 開催月日
        raceDat.id.JyoCD = dr[5].ToString();                     // 競馬場コード
        raceDat.id.Kaiji = dr[6].ToString();                     // 開催回[第N回]
        raceDat.id.Nichiji = dr[7].ToString();                   // 開催日目[N日目]
        raceDat.id.RaceNum = dr[8].ToString();                   // レース番号
        raceDat.RaceInfo.YoubiCD = dr[9].ToString();             // 曜日コード
        raceDat.RaceInfo.TokuNum = dr[10].ToString();            // 特別競走番号
        raceDat.RaceInfo.Hondai = dr[11].ToString();             // 競走名本題
        raceDat.RaceInfo.Fukudai = dr[12].ToString();            // 競走名副題
        raceDat.RaceInfo.Kakko = dr[13].ToString();              // 競走名カッコ内
        raceDat.RaceInfo.HondaiEng = dr[14].ToString();          // 競走名本題欧字
        raceDat.RaceInfo.FukudaiEng = dr[15].ToString();         // 競走名副題欧字
        raceDat.RaceInfo.KakkoEng = dr[16].ToString();           // 競走名カッコ内欧字
        raceDat.RaceInfo.Ryakusyo10 = dr[17].ToString();         // 競走名略称10字
        raceDat.RaceInfo.Ryakusyo6 = dr[18].ToString();          // 競走名略称6字
        raceDat.RaceInfo.Ryakusyo3 = dr[19].ToString();          // 競走名略称3字
        raceDat.RaceInfo.Kubun = dr[20].ToString();              // 競走名区分
        raceDat.RaceInfo.Nkai = dr[21].ToString();               // 重賞回次[第N回]
        raceDat.GradeCD = dr[22].ToString();                     // グレードコード
        raceDat.GradeCDBefore = dr[23].ToString();               // 変更前グレードコード
        raceDat.JyokenInfo.SyubetuCD = dr[24].ToString();        // 競走種別コード
        raceDat.JyokenInfo.KigoCD = dr[25].ToString();           // 競走記号コード
        raceDat.JyokenInfo.JyuryoCD = dr[26].ToString();         // 重量種別コード
        raceDat.JyokenInfo.JyokenCD[0] = dr[27].ToString();      // 競走条件コード1
        raceDat.JyokenInfo.JyokenCD[1] = dr[28].ToString();      // 競走条件コード2
        raceDat.JyokenInfo.JyokenCD[2] = dr[29].ToString();      // 競走条件コード3
        raceDat.JyokenInfo.JyokenCD[3] = dr[30].ToString();      // 競走条件コード4
        raceDat.JyokenInfo.JyokenCD[4] = dr[31].ToString();      // 競走条件コード5
        raceDat.JyokenName = dr[32].ToString();                  // 競走条件名称
        raceDat.Kyori = dr[33].ToString();                       // 距離
        raceDat.KyoriBefore = dr[34].ToString();                 // 変更前距離
        raceDat.TrackCD = dr[35].ToString();                     // トラックコード
        raceDat.TrackCDBefore = dr[36].ToString();               // 変更前トラックコード
        raceDat.CourseKubunCD = dr[37].ToString();               // コース区分
        raceDat.CourseKubunCDBefore = dr[38].ToString();         // 変更前コース区分
        raceDat.Honsyokin[0] = dr[39].ToString();                // 本賞金1
        raceDat.Honsyokin[1] = dr[40].ToString();                // 本賞金2
        raceDat.Honsyokin[2] = dr[41].ToString();                // 本賞金3
        raceDat.Honsyokin[3] = dr[42].ToString();                // 本賞金4
        raceDat.Honsyokin[4] = dr[43].ToString();                // 本賞金5
        raceDat.Honsyokin[5] = dr[44].ToString();                // 本賞金6
        raceDat.Honsyokin[6] = dr[45].ToString();                // 本賞金7
        raceDat.HonsyokinBefore[0] = dr[46].ToString();          // 変更前本賞金1
        raceDat.HonsyokinBefore[1] = dr[47].ToString();          // 変更前本賞金2
        raceDat.HonsyokinBefore[2] = dr[48].ToString();          // 変更前本賞金3
        raceDat.HonsyokinBefore[3] = dr[49].ToString();          // 変更前本賞金4
        raceDat.HonsyokinBefore[4] = dr[50].ToString();          // 変更前本賞金5
        raceDat.Fukasyokin[0] = dr[51].ToString();               // 付加賞金1
        raceDat.Fukasyokin[1] = dr[52].ToString();               // 付加賞金2
        raceDat.Fukasyokin[2] = dr[53].ToString();               // 付加賞金3
        raceDat.Fukasyokin[3] = dr[54].ToString();               // 付加賞金4
        raceDat.Fukasyokin[4] = dr[55].ToString();               // 付加賞金5
        raceDat.FukasyokinBefore[0] = dr[56].ToString();         // 変更前付加賞金1
        raceDat.FukasyokinBefore[1] = dr[57].ToString();         // 変更前付加賞金2
        raceDat.FukasyokinBefore[2] = dr[58].ToString();         // 変更前付加賞金3
        raceDat.HassoTime = dr[59].ToString();                   // 発走時刻
        raceDat.HassoTimeBefore = dr[60].ToString();             // 変更前発走時刻
        raceDat.TorokuTosu = dr[61].ToString();                  // 登録頭数
        raceDat.SyussoTosu = dr[62].ToString();                  // 出走頭数
        raceDat.NyusenTosu = dr[63].ToString();                  // 入線頭数
        raceDat.TenkoBaba.TenkoCD = dr[64].ToString();           // 天候コード
        raceDat.TenkoBaba.SibaBabaCD = dr[65].ToString();        // 芝馬場状態コード
        raceDat.TenkoBaba.DirtBabaCD = dr[66].ToString();        // ダート馬場状態コード
        raceDat.LapTime[0] = dr[67].ToString();                  // ラップタイム1
        raceDat.LapTime[1] = dr[68].ToString();                  // ラップタイム2
        raceDat.LapTime[2] = dr[69].ToString();                  // ラップタイム3
        raceDat.LapTime[3] = dr[70].ToString();                  // ラップタイム4
        raceDat.LapTime[4] = dr[71].ToString();                  // ラップタイム5
        raceDat.LapTime[5] = dr[72].ToString();                  // ラップタイム6
        raceDat.LapTime[6] = dr[73].ToString();                  // ラップタイム7
        raceDat.LapTime[7] = dr[74].ToString();                  // ラップタイム8
        raceDat.LapTime[8] = dr[75].ToString();                  // ラップタイム9
        raceDat.LapTime[9] = dr[76].ToString();                  // ラップタイム10
        raceDat.LapTime[10] = dr[77].ToString();                 // ラップタイム11
        raceDat.LapTime[11] = dr[78].ToString();                 // ラップタイム12
        raceDat.LapTime[12] = dr[79].ToString();                 // ラップタイム13
        raceDat.LapTime[13] = dr[80].ToString();                 // ラップタイム14
        raceDat.LapTime[14] = dr[81].ToString();                 // ラップタイム15
        raceDat.LapTime[15] = dr[82].ToString();                 // ラップタイム16
        raceDat.LapTime[16] = dr[83].ToString();                 // ラップタイム17
        raceDat.LapTime[17] = dr[84].ToString();                 // ラップタイム18
        raceDat.LapTime[18] = dr[85].ToString();                 // ラップタイム19
        raceDat.LapTime[19] = dr[86].ToString();                 // ラップタイム20
        raceDat.LapTime[20] = dr[87].ToString();                 // ラップタイム21
        raceDat.LapTime[21] = dr[88].ToString();                 // ラップタイム22
        raceDat.LapTime[22] = dr[89].ToString();                 // ラップタイム23
        raceDat.LapTime[23] = dr[90].ToString();                 // ラップタイム24
        raceDat.LapTime[24] = dr[91].ToString();                 // ラップタイム25
        raceDat.SyogaiMileTime = dr[92].ToString();              // 障害マイルタイム
        raceDat.HaronTimeS3 = dr[93].ToString();                 // 前3ハロンタイム
        raceDat.HaronTimeS4 = dr[94].ToString();                 // 前4ハロンタイム
        raceDat.HaronTimeL3 = dr[95].ToString();                 // 後3ハロンタイム
        raceDat.HaronTimeL4 = dr[96].ToString();                 // 後4ハロンタイム
        raceDat.CornerInfo[0].Corner = dr[97].ToString();        // コーナー通過順1コーナー
        raceDat.CornerInfo[0].Syukaisu = dr[98].ToString();      // コーナー通過順1周回数
        raceDat.CornerInfo[0].Jyuni = dr[99].ToString();         // コーナー通過順1各通過順位
        raceDat.CornerInfo[1].Corner = dr[100].ToString();       // コーナー通過順2コーナー
        raceDat.CornerInfo[1].Syukaisu = dr[101].ToString();     // コーナー通過順2周回数
        raceDat.CornerInfo[1].Jyuni = dr[102].ToString();        // コーナー通過順2各通過順位
        raceDat.CornerInfo[2].Corner = dr[103].ToString();       // コーナー通過順3コーナー
        raceDat.CornerInfo[2].Syukaisu = dr[104].ToString();     // コーナー通過順3周回数
        raceDat.CornerInfo[2].Jyuni = dr[105].ToString();        // コーナー通過順3各通過順位
        raceDat.CornerInfo[3].Corner = dr[106].ToString();       // コーナー通過順4コーナー
        raceDat.CornerInfo[3].Syukaisu = dr[107].ToString();     // コーナー通過順4周回数
        raceDat.CornerInfo[3].Jyuni = dr[108].ToString();        // コーナー通過順4各通過順位
        raceDat.RecordUpKubun = dr[109].ToString();              // レコード更新区分
    }

    //------------------------------------------------------------------------
    //  馬毎レース情報構造体の情報をJV-Dataデータセットに格納
    //------------------------------------------------------------------------
    // [引数]
    //   raceUmaDat      = 馬毎レース情報構造体
    //   jvdds           = JV-Dataデータセット
    //------------------------------------------------------------------------
    public static void SetJVDataUmaRaceDataSet(JV_SE_RACE_UMA raceUmaDat, dynamic jvdds)
    {
        DataRow dr;       // データ1行分の各格納領域
        bool bnr;         // 新しい行作成フラグ 作成時:True

        // 値の初期化
        bnr = false;

        // 格納済みデータから主キーが同じ行を検索する
        dr = jvdds.UMA_RACE.FindByYearMonthDayJyoCDKaijiNichijiRaceNumUmabanKettoNum(
                            raceUmaDat.id.Year,
                            raceUmaDat.id.MonthDay,
                            raceUmaDat.id.JyoCD,
                            raceUmaDat.id.Kaiji,
                            raceUmaDat.id.Nichiji,
                            raceUmaDat.id.RaceNum,
                            raceUmaDat.Umaban,
                            raceUmaDat.KettoNum);

        // 主キーの同じデータが存在したか否か
        if (dr == null)
        {
            // 存在しなかった場合、新しいRowを作成する
            dr = jvdds.UMA_RACE.NewRow();
            // 作成フラグをセット
            bnr = true;
            // 主キーのセット
            dr[jvdds.UMA_RACE.YearColumn] = raceUmaDat.id.Year;                             // 開催年
            dr[jvdds.UMA_RACE.MonthDayColumn] = raceUmaDat.id.MonthDay;                     // 開催月日
            dr[jvdds.UMA_RACE.JyoCDColumn] = raceUmaDat.id.JyoCD;                           // 競馬場コード
            dr[jvdds.UMA_RACE.KaijiColumn] = raceUmaDat.id.Kaiji;                           // 開催回[第N回]
            dr[jvdds.UMA_RACE.NichijiColumn] = raceUmaDat.id.Nichiji;                       // 開催日目[N日目]
            dr[jvdds.UMA_RACE.RaceNumColumn] = raceUmaDat.id.RaceNum;                       // レース番号
            dr[jvdds.UMA_RACE.UmabanColumn] = raceUmaDat.Umaban;                            // 馬番
            dr[jvdds.UMA_RACE.KettoNumColumn] = raceUmaDat.KettoNum;                        // 血統登録番号
        }

        // データのセット
        dr[jvdds.UMA_RACE.RecordSpecColumn] = raceUmaDat.head.RecordSpec;                   // レコード種別
        dr[jvdds.UMA_RACE.DataKubunColumn] = raceUmaDat.head.DataKubun;                     // データ区分
        dr[jvdds.UMA_RACE.MakeDateColumn] = raceUmaDat.head.MakeDate.Year +
                                            raceUmaDat.head.MakeDate.Month +
                                            raceUmaDat.head.MakeDate.Day;                   // データ作成年月日
        dr[jvdds.UMA_RACE.WakubanColumn] = raceUmaDat.Wakuban;                              // 枠番
        dr[jvdds.UMA_RACE.BameiColumn] = raceUmaDat.Bamei;                                  // 馬名
        dr[jvdds.UMA_RACE.UmaKigoCDColumn] = raceUmaDat.UmaKigoCD;                          // 馬記号コード
        dr[jvdds.UMA_RACE.SexCDColumn] = raceUmaDat.SexCD;                                  // 性別コード
        dr[jvdds.UMA_RACE.HinsyuCDColumn] = raceUmaDat.HinsyuCD;                            // 品種コード
        dr[jvdds.UMA_RACE.KeiroCDColumn] = raceUmaDat.KeiroCD;                              // 毛色コード
        dr[jvdds.UMA_RACE.BareiColumn] = raceUmaDat.Barei;                                  // 馬齢
        dr[jvdds.UMA_RACE.TozaiCDColumn] = raceUmaDat.TozaiCD;                              // 東西所属コード
        dr[jvdds.UMA_RACE.ChokyosiCodeColumn] = raceUmaDat.ChokyosiCode;                    // 調教師コード
        dr[jvdds.UMA_RACE.ChokyosiRyakusyoColumn] = raceUmaDat.ChokyosiRyakusyo;            // 調教師名略称
        dr[jvdds.UMA_RACE.BanusiCodeColumn] = raceUmaDat.BanusiCode;                        // 馬主コード
        dr[jvdds.UMA_RACE.BanusiNameColumn] = raceUmaDat.BanusiName;                        // 馬主名
        dr[jvdds.UMA_RACE.FukusyokuColumn] = raceUmaDat.Fukusyoku;                          // 服色標示
        dr[jvdds.UMA_RACE.reserved1Column] = raceUmaDat.reserved1;                          // 予備
        dr[jvdds.UMA_RACE.FutanColumn] = raceUmaDat.Futan;                                  // 負担重量
        dr[jvdds.UMA_RACE.FutanBeforeColumn] = raceUmaDat.FutanBefore;                      // 変更前負担重量
        dr[jvdds.UMA_RACE.BlinkerColumn] = raceUmaDat.Blinker;                              // ブリンカー使用区分
        dr[jvdds.UMA_RACE.reserved2Column] = raceUmaDat.reserved2;                          // 予備
        dr[jvdds.UMA_RACE.KisyuCodeColumn] = raceUmaDat.KisyuCode;                          // 騎手コード
        dr[jvdds.UMA_RACE.KisyuCodeBeforeColumn] = raceUmaDat.KisyuCodeBefore;              // 変更前騎手コード
        dr[jvdds.UMA_RACE.KisyuRyakusyoColumn] = raceUmaDat.KisyuRyakusyo;                  // 騎手名略称
        dr[jvdds.UMA_RACE.KisyuRyakusyoBeforeColumn] = raceUmaDat.KisyuRyakusyoBefore;      // 変更前騎手名略称
        dr[jvdds.UMA_RACE.MinaraiCDColumn] = raceUmaDat.MinaraiCD;                          // 騎手見習コード
        dr[jvdds.UMA_RACE.MinaraiCDBeforeColumn] = raceUmaDat.MinaraiCDBefore;              // 変更前騎手見習コード
        dr[jvdds.UMA_RACE.BaTaijyuColumn] = raceUmaDat.BaTaijyu;                            // 馬体重
        dr[jvdds.UMA_RACE.ZogenFugoColumn] = raceUmaDat.ZogenFugo;                          // 増減符号
        dr[jvdds.UMA_RACE.ZogenSaColumn] = raceUmaDat.ZogenSa;                              // 増減差
        dr[jvdds.UMA_RACE.IJyoCDColumn] = raceUmaDat.IJyoCD;                                // 異常区分コード
        dr[jvdds.UMA_RACE.NyusenJyuniColumn] = raceUmaDat.NyusenJyuni;                      // 入線順位
        dr[jvdds.UMA_RACE.KakuteiJyuniColumn] = raceUmaDat.KakuteiJyuni;                    // 確定着順
        dr[jvdds.UMA_RACE.DochakuKubunColumn] = raceUmaDat.DochakuKubun;                    // 同着区分
        dr[jvdds.UMA_RACE.DochakuTosuColumn] = raceUmaDat.DochakuTosu;                      // 同着頭数
        dr[jvdds.UMA_RACE.TimeColumn] = raceUmaDat.Time;                                    // 走破タイム
        dr[jvdds.UMA_RACE.ChakusaCDColumn] = raceUmaDat.ChakusaCD;                          // 着差コード
        dr[jvdds.UMA_RACE.ChakusaCDPColumn] = raceUmaDat.ChakusaCDP;                        // +着差コード
        dr[jvdds.UMA_RACE.ChakusaCDPPColumn] = raceUmaDat.ChakusaCDPP;                      // ++着差コード
        dr[jvdds.UMA_RACE.Jyuni1cColumn] = raceUmaDat.Jyuni1c;                              // 1コーナーでの順位
        dr[jvdds.UMA_RACE.Jyuni2cColumn] = raceUmaDat.Jyuni2c;                              // 2コーナーでの順位
        dr[jvdds.UMA_RACE.Jyuni3cColumn] = raceUmaDat.Jyuni3c;                              // 3コーナーでの順位
        dr[jvdds.UMA_RACE.Jyuni4cColumn] = raceUmaDat.Jyuni4c;                              // 4コーナーでの順位
        dr[jvdds.UMA_RACE.OddsColumn] = raceUmaDat.Odds;                                    // 単勝オッズ
        dr[jvdds.UMA_RACE.NinkiColumn] = raceUmaDat.Ninki;                                  // 単勝人気順
        dr[jvdds.UMA_RACE.HonsyokinColumn] = raceUmaDat.Honsyokin;                          // 獲得本賞金
        dr[jvdds.UMA_RACE.FukasyokinColumn] = raceUmaDat.Fukasyokin;                        // 獲得付加賞金
        dr[jvdds.UMA_RACE.reserved3Column] = raceUmaDat.reserved3;                          // 予備
        dr[jvdds.UMA_RACE.reserved4Column] = raceUmaDat.reserved4;                          // 予備
        dr[jvdds.UMA_RACE.HaronTimeL4Column] = raceUmaDat.HaronTimeL4;                      // 後4ハロンタイム
        dr[jvdds.UMA_RACE.HaronTimeL3Column] = raceUmaDat.HaronTimeL3;                      // 後3ハロンタイム
        dr[jvdds.UMA_RACE.KettoNum1Column] = raceUmaDat.ChakuUmaInfo[0].KettoNum;           // 相手馬1血統登録番号
        dr[jvdds.UMA_RACE.Bamei1Column] = raceUmaDat.ChakuUmaInfo[0].Bamei;                 // 相手馬1馬名
        dr[jvdds.UMA_RACE.KettoNum2Column] = raceUmaDat.ChakuUmaInfo[1].KettoNum;           // 相手馬2血統登録番号
        dr[jvdds.UMA_RACE.Bamei2Column] = raceUmaDat.ChakuUmaInfo[1].Bamei;                 // 相手馬2馬名
        dr[jvdds.UMA_RACE.KettoNum3Column] = raceUmaDat.ChakuUmaInfo[2].KettoNum;           // 相手馬3血統登録番号
        dr[jvdds.UMA_RACE.Bamei3Column] = raceUmaDat.ChakuUmaInfo[2].Bamei;                 // 相手馬3馬名
        dr[jvdds.UMA_RACE.TimeDiffColumn] = raceUmaDat.TimeDiff;                            // タイム差
        dr[jvdds.UMA_RACE.RecordUpKubunColumn] = raceUmaDat.RecordUpKubun;                  // レコード更新区分
        dr[jvdds.UMA_RACE.DMKubunColumn] = raceUmaDat.DMKubun;                              // マイニング区分
        dr[jvdds.UMA_RACE.DMTimeColumn] = raceUmaDat.DMTime;                                // マイニング予想走破タイム
        dr[jvdds.UMA_RACE.DMGosaPColumn] = raceUmaDat.DMGosaP;                              // 予測誤差[信頼度]+
        dr[jvdds.UMA_RACE.DMGosaMColumn] = raceUmaDat.DMGosaM;                              // 予測誤差[信頼度]-
        dr[jvdds.UMA_RACE.DMJyuniColumn] = raceUmaDat.DMJyuni;                              // マイニング予想順位
        dr[jvdds.UMA_RACE.KyakusituKubunColumn] = raceUmaDat.KyakusituKubun;                // 今回レース脚質判定

        // 新しい行の場合、jvddsに行を追加
        if (bnr == true)
        {
            jvdds.UMA_RACE.Rows.Add(dr);
        }
    }

    //------------------------------------------------------------------------
    //  JV-Dataデータセットの馬毎レース情報をJV-Data構造体に格納
    //------------------------------------------------------------------------
    // [引数]
    //   dr            = 馬毎レース情報[一件]
    //   raceUmaDat    = 馬毎レース情報構造体
    //------------------------------------------------------------------------
    public static void SetJVDataUmaRaceStructure(DataRow dr, ref JV_SE_RACE_UMA raceUmaDat)
    {
        // 構造体の配列の初期化
        raceUmaDat.Initialize();

        // データのセット
        raceUmaDat.head.RecordSpec = dr[0].ToString();              // レコード種別
        raceUmaDat.head.DataKubun = dr[1].ToString();               // データ区分
        string str1 = dr[2].ToString();
        raceUmaDat.head.MakeDate.SetDataB(Str2Byte(ref str1));      // データ作成年月日
        raceUmaDat.id.Year = dr[3].ToString();                      // 開催年
        raceUmaDat.id.MonthDay = dr[4].ToString();                  // 開催月日
        raceUmaDat.id.JyoCD = dr[5].ToString();                     // 競馬場コード
        raceUmaDat.id.Kaiji = dr[6].ToString();                     // 開催回[第N回]
        raceUmaDat.id.Nichiji = dr[7].ToString();                   // 開催日目[N日目]
        raceUmaDat.id.RaceNum = dr[8].ToString();                   // レース番号
        raceUmaDat.Wakuban = dr[9].ToString();                      // 枠番
        raceUmaDat.Umaban = dr[10].ToString();                      // 馬番
        raceUmaDat.KettoNum = dr[11].ToString();                    // 血統登録番号
        raceUmaDat.Bamei = dr[12].ToString();                       // 馬名
        raceUmaDat.UmaKigoCD = dr[13].ToString();                   // 馬記号コード
        raceUmaDat.SexCD = dr[14].ToString();                       // 性別コード
        raceUmaDat.HinsyuCD = dr[15].ToString();                    // 品種コード
        raceUmaDat.KeiroCD = dr[16].ToString();                     // 毛色コード
        raceUmaDat.Barei = dr[17].ToString();                       // 馬齢
        raceUmaDat.TozaiCD = dr[18].ToString();                     // 東西所属コード
        raceUmaDat.ChokyosiCode = dr[19].ToString();                // 調教師コード
        raceUmaDat.ChokyosiRyakusyo = dr[20].ToString();            // 調教師名略称
        raceUmaDat.BanusiCode = dr[21].ToString();                  // 馬主コード
        raceUmaDat.BanusiName = dr[22].ToString();                  // 馬主名
        raceUmaDat.Fukusyoku = dr[23].ToString();                   // 服色標示
        raceUmaDat.reserved1 = dr[24].ToString();                   // 予備
        raceUmaDat.Futan = dr[25].ToString();                       // 負担重量
        raceUmaDat.FutanBefore = dr[26].ToString();                 // 変更前負担重量
        raceUmaDat.Blinker = dr[27].ToString();                     // ブリンカー使用区分
        raceUmaDat.reserved2 = dr[28].ToString();                   // 予備
        raceUmaDat.KisyuCode = dr[29].ToString();                   // 騎手コード
        raceUmaDat.KisyuCodeBefore = dr[30].ToString();             // 変更前騎手コード
        raceUmaDat.KisyuRyakusyo = dr[31].ToString();               // 騎手名略称
        raceUmaDat.KisyuRyakusyoBefore = dr[32].ToString();         // 変更前騎手名略称
        raceUmaDat.MinaraiCD = dr[33].ToString();                   // 騎手見習コード
        raceUmaDat.MinaraiCDBefore = dr[34].ToString();             // 変更前騎手見習コード
        raceUmaDat.BaTaijyu = dr[35].ToString();                    // 馬体重
        raceUmaDat.ZogenFugo = dr[36].ToString();                   // 増減符号
        raceUmaDat.ZogenSa = dr[37].ToString();                     // 増減差
        raceUmaDat.IJyoCD = dr[38].ToString();                      // 異常区分コード
        raceUmaDat.NyusenJyuni = dr[39].ToString();                 // 入線順位
        raceUmaDat.KakuteiJyuni = dr[40].ToString();                // 確定着順
        raceUmaDat.DochakuKubun = dr[41].ToString();                // 同着区分
        raceUmaDat.DochakuTosu = dr[42].ToString();                 // 同着頭数
        raceUmaDat.Time = dr[43].ToString();                        // 走破タイム
        raceUmaDat.ChakusaCD = dr[44].ToString();                   // 着差コード
        raceUmaDat.ChakusaCDP = dr[45].ToString();                  // +着差コード
        raceUmaDat.ChakusaCDPP = dr[46].ToString();                 // ++着差コード
        raceUmaDat.Jyuni1c = dr[47].ToString();                     // 1コーナーでの順位
        raceUmaDat.Jyuni2c = dr[48].ToString();                     // 2コーナーでの順位
        raceUmaDat.Jyuni3c = dr[49].ToString();                     // 3コーナーでの順位
        raceUmaDat.Jyuni4c = dr[50].ToString();                     // 4コーナーでの順位
        raceUmaDat.Odds = dr[51].ToString();                        // 単勝オッズ
        raceUmaDat.Ninki = dr[52].ToString();                       // 単勝人気順
        raceUmaDat.Honsyokin = dr[53].ToString();                   // 獲得本賞金
        raceUmaDat.Fukasyokin = dr[54].ToString();                  // 獲得付加賞金
        raceUmaDat.reserved3 = dr[55].ToString();                   // 予備
        raceUmaDat.reserved4 = dr[56].ToString();                   // 予備
        raceUmaDat.HaronTimeL4 = dr[57].ToString();                 // 後4ハロンタイム
        raceUmaDat.HaronTimeL3 = dr[58].ToString();                 // 後3ハロンタイム
        raceUmaDat.ChakuUmaInfo[0].KettoNum = dr[59].ToString();    // 相手馬1血統登録番号
        raceUmaDat.ChakuUmaInfo[0].Bamei = dr[60].ToString();       // 相手馬1馬名
        raceUmaDat.ChakuUmaInfo[1].KettoNum = dr[61].ToString();    // 相手馬2血統登録番号
        raceUmaDat.ChakuUmaInfo[1].Bamei = dr[62].ToString();       // 相手馬2馬名
        raceUmaDat.ChakuUmaInfo[2].KettoNum = dr[63].ToString();    // 相手馬3血統登録番号
        raceUmaDat.ChakuUmaInfo[2].Bamei = dr[64].ToString();       // 相手馬3馬名
        raceUmaDat.TimeDiff = dr[65].ToString();                    // タイム差
        raceUmaDat.RecordUpKubun = dr[66].ToString();               // レコード更新区分
        raceUmaDat.DMKubun = dr[67].ToString();                     // マイニング区分
        raceUmaDat.DMTime = dr[68].ToString();                      // マイニング予想走破タイム
        raceUmaDat.DMGosaP = dr[69].ToString();                     // 予測誤差[信頼度]+
        raceUmaDat.DMGosaM = dr[70].ToString();                     // 予測誤差[信頼度]-
        raceUmaDat.DMJyuni = dr[71].ToString();                     // マイニング予想順位
        raceUmaDat.KyakusituKubun = dr[72].ToString();              // 今回レース脚質判定
    }

    //------------------------------------------------------------------------
    //  データソースの指定テーブルのデータをDBに接続して全件削除
    //------------------------------------------------------------------------
    // [引数]
    //   tabName       = 削除対象テーブル名
    // [戻り値]
    //   Integer       = 削除件数
    //------------------------------------------------------------------------
    public static int deleteDBTable(string tabName, string connectionString)
    {
        // コネクション定義
        OleDbConnection cn = new OleDbConnection();
        // データアダプタ定義
        OleDbDataAdapter da = new OleDbDataAdapter();

        try
        {
            // 接続情報の設定
            cn.ConnectionString = connectionString;

            // 削除用コマンドの設定
            da.DeleteCommand = new OleDbCommand();
            da.DeleteCommand.CommandText = "DELETE FROM " + tabName; // テーブル全件削除
            da.DeleteCommand.Connection = cn;

            // DB接続
            cn.Open();
            // 削除実施
            return da.DeleteCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            // エラーメッセージ表示
            Debug.WriteLine(ex.Message);
            return -1;
        }
        finally
        {
            // DB切断
            cn.Close();

            // 後処理
            cn.Dispose();    // コネクションリソースの解放
            da.Dispose();    // データアダプタリソースの解放
        }
    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Diagnostics;    // Debug クラス使用のために必要
using static JVData_Struct;  // JVData_Struct クラス使用のために必要
using static basADOUtility;  // basADOUtility クラス使用のために必要

namespace WindowsFormsApp
{
    public partial class frmMain : Form
    {
        private int nDownloadCount; // JVOpen 総ダウロードファイル数
        private bool JVOpenFlg;     // JVOpen 状態フラグ Opne時=True

        private clsCodeConv objCodeConv; // コード変換インスタンス

        public frmMain()
        {
            InitializeComponent();
        }
        private void mnuConfJV_Click(object sender, EventArgs e)
        {
            try
            {
                // リターンコード
                int nReturnCode;

                // 設定画面表示
                nReturnCode = AxJVLink1.JVSetUIProperties();

                if (nReturnCode != 0)
                {
                    MessageBox.Show("JVSetUIPropertiesエラー コード:" + nReturnCode + ":", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
            }
        }
        private void frmMain_Load(object sender, EventArgs e)
        {
            string sid;
            int nReturnCode;

            // 引数設定
            sid = "Test";

            // JVLink 初期化
            nReturnCode = AxJVLink1.JVInit(sid);

            // エラー判定
            if (nReturnCode != 0)
            {
                MessageBox.Show("JVInit エラー コード:" + nReturnCode + ":", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Cursor = System.Windows.Forms.Cursors.Default;
            }

            // コード変換インスタンス生成
            objCodeConv = new clsCodeConv();
            // パスを指定し、コードファイルを読込む
            objCodeConv.FileName = Application.StartupPath + @"\CodeTable.csv";
        }
        private void btnGetJVData_Click(object sender, EventArgs e)
        {
            int nReturnCode;

            // JV - Dataデータセット
            DataDataSet jvdds = new DataDataSet();
            // レース詳細のテーブルアダプタ
            DataDataSetTableAdapters.RACETableAdapter raceTA = new DataDataSetTableAdapters.RACETableAdapter();
            // 馬毎レース情報のテーブルアダプタ
            DataDataSetTableAdapters.UMA_RACETableAdapter umaRaceTA = new DataDataSetTableAdapters.UMA_RACETableAdapter();

            try
            {
                string strDataSpec;          // JVOpen: ファイル識別子
                string strFromTime;          // JVOpen: データ提供日付
                int nOption;                 // JVOpen: オプション
                int nReadCount;              // JVOpen: 戻り値
                /* int nDownloadCount; */    // JVOpen: 総ダウンロードファイル数
                string strLastFileTimestamp; // JVOpen: 最新ファイルのタイムスタンプ゚

                int nBuffSize = 110000;      // JVRead: データ格納バッファサイズ
                int nNameSize = 256;         // JVRead: ファイル名サイズ
                string strBuff;              // JVRead: データ格納バッファ
                string strFileName;          // JVRead: ダウンロードファイル名
                JV_RA_RACE RaceInfo = new JV_RA_RACE();              // レース詳細情報構造体
                JV_SE_RACE_UMA RaceUmaInfo = new JV_SE_RACE_UMA();   // 馬毎レース情報構造体

                // 表示ウィンドウの初期化
                rtbData.Clear();

                // ボタンの無効化
                btnGetJVData.Enabled = false;

                // MDBのデータを削除
                if (MessageBox.Show("MDBのデータを削除しますか?", "削除確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    if (deleteDBTable(jvdds.RACE.TableName, Properties.Settings.Default.DataConnectionString) < 0) return;
                    if (deleteDBTable(jvdds.UMA_RACE.TableName, Properties.Settings.Default.DataConnectionString) < 0) return;
                }

                // MDBからデータを取得
                raceTA.Fill(jvdds.RACE);
                umaRaceTA.Fill(jvdds.UMA_RACE);

                if (MessageBox.Show("JV-Linkでデータを取得しますか?", "取得確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    // 進捗表示初期設定
                    tmrDownload.Enabled = false; // タイマー停止
                    prgDownload.Value = 0;       // JVData ダウンロード進捗
                    prgJVRead.Value = 0;         // JVData 読み込み進捗

                    // 引数設定
                    strDataSpec = "RACE";
                    strFromTime = "20050301000000";
                    nOption = 2;
                    nReadCount = 0;
                    nDownloadCount = 0;

                    // JVLink ダウンロード処理
                    nReturnCode = AxJVLink1.JVOpen(strDataSpec, strFromTime, nOption, ref nReadCount, ref nDownloadCount, out strLastFileTimestamp);

                    // エラー判定
                    if (nReturnCode != 0)
                    {
                        MessageBox.Show("JVOpen エラー:" + nReturnCode);
                    }
                    else
                    {
                        MessageBox.Show(
                            "戻り値 : " + nReturnCode + "\n" +
                            "読み込みファイル数 : " + nReadCount + "\n" +
                            "ダウンロードファイル数 : " + nDownloadCount + "\n" +
                            "タイムスタンプ : " + strLastFileTimestamp);

                        // 進捗表示プログレスバー最大値設定
                        if (nDownloadCount == 0)
                        {
                            prgDownload.Maximum = 100;  // ダウンロード必要無し
                            prgDownload.Value = 100;
                        }
                        else
                        {
                            prgDownload.Maximum = nDownloadCount;
                            tmrDownload.Enabled = true;  // タイマー開始
                        }
                        prgJVRead.Maximum = nReadCount;

                        if (nReadCount > 0)
                        {
                            bool flg_exit = false;
                            do
                            {
                                // バックグラウンドでの処理を実行
                                Application.DoEvents();

                                // バッファ作成
                                strBuff = new string('\0', nBuffSize);
                                strFileName = new string('\0', nNameSize);

                                // JVRead で1行読み込み
                                nReturnCode = AxJVLink1.JVRead(out strBuff, out nBuffSize, out strFileName);

                                // リターンコードにより処理を分枝
                                switch (nReturnCode)
                                {
                                    case 0: // 全ファイル読み込み終了
                                        prgJVRead.Value = prgJVRead.Maximum;
                                        flg_exit = true;
                                        break;
                                    case -1: // ファイル切り替わり
                                        prgJVRead.Value = prgJVRead.Value + 1;
                                        break;
                                    case -3: // ダウンロード中
                                        break;
                                    case -201: // JVInit されてない
                                        MessageBox.Show("JVInit が行われていません。");
                                        flg_exit = true;
                                        break;
                                    case -203: // JVOpen されてない
                                        MessageBox.Show("JVOpen が行われていません。");
                                        flg_exit = true;
                                        break;
                                    case -503: // ファイルがない
                                        MessageBox.Show(strFileName + "が存在しません。");
                                        flg_exit = true;
                                        break;
                                    case int ret when ret > 0: // 正常読み込み

                                        // レコード種別 ID の識別
                                        if (strBuff.Substring(0, 2) == "RA")
                                        {
                                            // レース詳細構造体への展開
                                            RaceInfo.SetDataB(ref strBuff);
                                            // 読み込んだ情報をデータセットへ格納する
                                            SetJVDataRaceDataSet(RaceInfo, jvdds);
                                        }
                                        else if (strBuff.Substring(0, 2) == "SE")
                                        {
                                            // 馬毎レース情報構造体への展開
                                            RaceUmaInfo.SetDataB(ref strBuff);
                                            // 読み込んだ情報をデータセットへ格納する
                                            SetJVDataUmaRaceDataSet(RaceUmaInfo, jvdds);
                                        }
                                        else
                                        {
                                            // レース詳細、馬毎レース情報以外は読み飛ばす
                                            AxJVLink1.JVSkip();
                                        }
                                        break;
                                }
                            }
                            while (!flg_exit);
                        }
                        // タイマ有効時は、無効化する
                        if (tmrDownload.Enabled == true)
                        {
                            tmrDownload.Enabled = false;
                            prgDownload.Value = prgDownload.Maximum;
                        }
                        // データセットの情報をDBへ反映
                        if (MessageBox.Show("取得したデータをMDBへ反映しますか?", "反映確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            // レース詳細を反映
                            raceTA.Update(jvdds.RACE);
                            // 馬毎レース情報を反映
                            umaRaceTA.Update(jvdds.UMA_RACE);
                        }

                        // データセットに格納した各情報を画面に表示

                        // レース詳細の情報を一行表示
                        int raceIndex;
                        DataDataSet.RACERow[] raceDRs; // レース詳細(複数行)格納用

                        // レース詳細の件数を取得
                        raceIndex = jvdds.RACE.Count();

                        // レース詳細が存在しない場合
                        if (raceIndex == 0)
                        {
                            MessageBox.Show("レース情報が存在しません");
                        }
                        else
                        {
                            // レース詳細の第10レースを検索(複数行)
                            raceDRs = (DataDataSet.RACERow[])jvdds.RACE.Select("RaceNum = '10'");
                            if (raceDRs.Length == 0)
                            {
                                MessageBox.Show("検索結果が0件です");
                            }
                            else
                            {
                                // 取得結果の一件目を構造体にセット
                                SetJVDataRaceStructure(raceDRs[0], ref RaceInfo);

                                // 画面表示
                                rtbData.AppendText(
                                    "年:" + RaceInfo.id.Year +
                                    " 月日:" + RaceInfo.id.MonthDay +
                                    " 場:" + objCodeConv.GetCodeName("2001", RaceInfo.id.JyoCD, 1) +
                                    " 回次:" + RaceInfo.id.Kaiji +
                                    " 日次:" + RaceInfo.id.Nichiji +
                                    " R:" + RaceInfo.id.RaceNum +
                                    " レース名:" + RaceInfo.RaceInfo.Ryakusyo10 +
                                    "\n");

                                // 表示したレース詳細の馬毎レース情報を全馬分表示
                                DataDataSet.UMA_RACERow[] raceUmaDRs;  // 馬毎レース情報(複数行)格納用

                                // データセットからレース詳細のキーで馬毎レース情報の行(複数行)を検索
                                raceUmaDRs = (DataDataSet.UMA_RACERow[])jvdds.UMA_RACE.Select(
                                    "Year = '" + RaceInfo.id.Year + "' AND " +
                                    "MonthDay = '" + RaceInfo.id.MonthDay + "' AND " +
                                    "JyoCD = '" + RaceInfo.id.JyoCD + "' AND " +
                                    "Kaiji = '" + RaceInfo.id.Kaiji + "' AND " +
                                    "Nichiji = '" + RaceInfo.id.Nichiji + "' AND " +
                                    "RaceNum = '" + RaceInfo.id.RaceNum + "'");

                                // 一行ずつ取り出し、画面に表示
                                foreach (DataDataSet.UMA_RACERow raceUmaDR in raceUmaDRs)
                                {
                                    // 行の情報を構造体にセット
                                    SetJVDataUmaRaceStructure(raceUmaDR, ref RaceUmaInfo);
                                    // 画面表示
                                    rtbData.AppendText(
                                        " 枠:" + RaceUmaInfo.Wakuban +
                                        " 馬番:" + RaceUmaInfo.Umaban +
                                        " 馬名:" + RaceUmaInfo.Bamei +
                                        " 騎手:" + RaceUmaInfo.KisyuRyakusyo +
                                        "\n");
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return;
            }
            finally
            {
                // JVLink 終了処理
                nReturnCode = AxJVLink1.JVClose();
                if (nReturnCode != 0)
                {
                    MessageBox.Show("JVClose エラー:" + nReturnCode);
                }

                // 後処理
                jvdds.Dispose();     // JV-Dataデータセットのリソース解放
                raceTA.Dispose();    // レース詳細テーブルアダプタのリソース解放
                umaRaceTA.Dispose(); // 馬毎レース情報テーブルアダプタのリソース開放

                // ボタンの有効化
                btnGetJVData.Enabled = true;
            }
            // 終了メッセージボックス表示
            MessageBox.Show("終了しました。");
        }
        private void tmrDownload_Tick(object sender, EventArgs e)
        {
            int nReturnCode;    // JVLink 返値

            // JVLink ダウンロード進捗率
            nReturnCode = AxJVLink1.JVStatus(); // ダウンロード済のファイル数を返す

            // エラー判定
            if (nReturnCode < 0)
            {
                // エラー
                MessageBox.Show("JVStatus エラー:" + nReturnCode);
                // タイマー停止
                tmrDownload.Enabled = false;
                // JVLink 終了処理
                nReturnCode = AxJVLink1.JVClose();
                if (nReturnCode != 0) MessageBox.Show("JVClse エラー:" + nReturnCode);
            }
            else if (nReturnCode < nDownloadCount)
            {
                // ダウンロード中
                // プログレス表示
                prgDownload.Value = nReturnCode;
            }
            else if (nReturnCode == nDownloadCount)
            {
                // ダウンロード完了
                // タイマー停止
                tmrDownload.Enabled = false;
                // プログレス表示
                prgDownload.Value = nReturnCode;
            }
        }
    }
}

Filed Under: JV-LinkをC#で使ってみる(WinForms版), 競馬でプログラミング 関連タグ:C#

Copyright © 2021 · Magazine Pro on Genesis Framework · WordPress