0

みなさん、こんにちは。よろしくお願いします!! 私はコーディングとプログラミングのまったくの初心者です(4〜5か月)

Visual Studio 2012 を使用し、C# でコーディングしています

SQL Server 管理スタジオでデータベースに接続する Windows フォーム アプリケーションを作成しています。

基本的に、起動時にデータベースからのデータを入力する必要がある 2 つのコンボ ボックスがあります。

コンボ ボックスにデータを入力する方法を作成しました。プログラムは 100% 動作します。起動時にデータが欠落することなくボックスにデータが入力されます。すべての行がコンボ ボックスに表示され、すべてが本来の動作とタイミングで正確に実行されます。やれ...

でも!

プログラムを実行するたびに、このメッセージが 5 回表示されます (メッセージを生成するコードが 5 回使用されるため)

System.IndexOutOfRangeException:There is no row at position 0
  at System.Data.RBTree1.GetNodeByIndex(Int32 userIndex)
  at System.Data.DataRowCollection.get_Item(Int32 index)

実際のプログラムが開始され、適切に実行される前に.??? (それは私を夢中にさせます!!)これが私の関連するすべてのコードです

以下のコードは、update_combobox(); を使用していることがわかるように、実際のフォームからのものです。initializeComponent セクション
で、起動時に入力するようにします

        namespace DB_Program
       {
           public partial class Form1 : Form
           {

                DataClass dc = new DataClass();

                public Form1()
                {
                    Thread t = new Thread(new ThreadStart(SplashScreen));
                    t.Start();
                    Thread.Sleep(5000);
                    InitializeComponent();
                    t.Abort();
                    update_ComboBox();            
                  }

これが可能にする私のフォームからの私のコードです

     private void update_ComboBox()
    {
        DataSet pList = dc.PListPop();

        cboBoxPList.DataSource = pList.Tables[0];
        cboBoxPList.DisplayMember = "PName";
        cboBoxPList.ValueMember = "PName";

        DataSet devList = dl.DevListPop();

        cboBoxDev.DataSource = devList.Tables[0];
        cboBoxDev.DisplayMember = "LName";
        cboBoxDev.ValueMember = "LName";

    }


         public String getDate(String pName)
        {
            String date = null;
            DataTable dTable = new DataTable();

            try
            {
                conn.Open();
                SqlDataAdapter sda = new SqlDataAdapter("SelPro", conn);
                sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                sda.SelectCommand.Parameters.Add("@PName", SqlDbType.VarChar).Value = pName;
                sda.Fill(dTable);
                date = dTable.Rows[0]["StartDate"].ToString();

            }
            catch (Exception GSD)
            {

                string a = GSD.StackTrace.ToString();
                MessageBox.Show(GSD.ToString());
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            return date;
        }

私のメッセージによると、これらはメッセージを生成する行です。最初のメッセージはすぐ上のコードに関連しています

         date = dTable.Rows[0]["StartDate"].ToString();
         date = dTable.Rows[0]["PlannedEndDate"].ToString();
         FirstName = dTable.Rows[0]["FirstName"].ToString();
         Spec = dTable.Rows[0]["Specialty"].ToString();
         PID = (int) dTable.Rows[0]["PID"];

PLEASE PLEASE PLEASE 誰か私のもどかしい悪夢を終わらせてください!私はプログラムをそのままにして実行する必要があります.

もう一度ありがとう!

4

1 に答える 1