みなさん、こんにちは。よろしくお願いします!! 私はコーディングとプログラミングのまったくの初心者です(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 誰か私のもどかしい悪夢を終わらせてください!私はプログラムをそのままにして実行する必要があります.
もう一度ありがとう!