2016-04-29 149 views
2

SQLクエリに一致する行がないことを再度エラーにしています。C#位置0に行がありません

は述べ:NO行は位置0

点ではありません

firstnameTxt.Text = dt.Rows[0].ItemArray[1].ToString(); 

以下は、私のC#コードです。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["New"] != null) 
     { 
      redPnl.Visible = false; 
      UserNameSess.Text += Session["New"].ToString(); 

      SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True"); 
      con.Open(); 

      SqlDataAdapter sda = new SqlDataAdapter("Select Student_Username, Student_FName, Student_SName, Student_Email FROM Student Where [email protected]", con); 
      sda.SelectCommand.Parameters.Add("@StuUsername", SqlDbType.VarChar).Value = UserNameSess.Text; 
      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      if (dt.Rows.Count > 0) 

      usernameTxt.Text = dt.Rows[0].ItemArray[0].ToString(); 
      firstnameTxt.Text = dt.Rows[0].ItemArray[1].ToString(); 
      surnameTxt.Text = dt.Rows[0].ItemArray[2].ToString(); 
      emailTxt.Text = dt.Rows[0].ItemArray[3].ToString(); 
      dt.Clear(); 

     } 
     else 
     { 
      redPnl.Visible = true; 
     } 



    } 

正直に値を戻してテキストボックスに表示する理由はわかりません。

+2

一つのこと: '場合(dt.Rows.Count> 0)'安全になりますが、それ以降も行にアクセスされた後にのみ、最初の文。かっこで囲みます。しかし、これが真実ならば、なぜエラーが出るのかは明らかではありません:_ "正直に値を取り戻してテキストボックスに表示する" _ –

答えて

5

のペア内のステートメントを囲む必要があり、実行されますあなたのif句に中括弧を追加するのを忘れ:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["New"] != null) 
    { 
     redPnl.Visible = false; 
     UserNameSess.Text += Session["New"].ToString(); 

     SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True"); 
     con.Open(); 

     SqlDataAdapter sda = new SqlDataAdapter("Select Student_Username, Student_FName, Student_SName, Student_Email FROM Student Where Student_U[email protected]", con); 
     sda.SelectCommand.Parameters.Add("@StuUsername", SqlDbType.VarChar).Value = UserNameSess.Text; 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     if (dt.Rows.Count > 0) 
     { 
      usernameTxt.Text = dt.Rows[0].ItemArray[0].ToString(); 
      firstnameTxt.Text = dt.Rows[0].ItemArray[1].ToString(); 
      surnameTxt.Text = dt.Rows[0].ItemArray[2].ToString(); 
      emailTxt.Text = dt.Rows[0].ItemArray[3].ToString(); 
      dt.Clear(); 
     } 
    } 
    else 
    { 
     redPnl.Visible = true; 
    } 
} 
+0

ありがとう!その常に小さなもの! –

+1

あなたは大歓迎です:) – Pikoh

3

ifのステートメントを{}のペアで囲む必要があります。そうしないと、条件は直後のステートメントにのみ適用されます。条件に基づいて実行するのに必要なだけのステートメントがある場合は、{}を省略することができます

if (dt.Rows.Count > 0) 
{ 
    usernameTxt.Text = dt.Rows[0].ItemArray[0].ToString(); 
    firstnameTxt.Text = dt.Rows[0].ItemArray[1].ToString(); 
    surnameTxt.Text = dt.Rows[0].ItemArray[2].ToString(); 
    emailTxt.Text = dt.Rows[0].ItemArray[3].ToString(); 
} 

いつものように他の人が他のすべてのケースであなたはあなたが {}

関連する問題