2015-10-08 2 views
1

Помощь Я продолжаю получать эту ошибку, когда пытаюсь получить конкретные данные оценки в моей строке.В позиции 0 нет строки;

У меня есть эти данные в моей базе данных:

PlayerName Score 
qwe   20 
keith   0 

У меня есть этот код в WinForm:

using (SqlConnection conn = new SqlConnection("Data Source=Rogue;Initial Catalog=SoftProject;Integrated Security=True")) 
{ 
    conn.Open(); 
    try 
    { 
    String str1 = ""; 
    using (SqlCommand cmd = new SqlCommand("Select PlayerName,Score from PlayerData where PlayerName = @player", conn)) 
    { 
     cmd.Parameters.AddWithValue("@player", txtPlayer.Text); 
     DataTable dataTable= new DataTable(); 
     dataTable.Load(cmd.ExecuteReader()); 

     if(dataTable.Rows.Count>0) 
     { 
      // concatenate the two string and get the table score row 
      str1 = String.Concat(str1, (dataTable.Rows[0]["Score"].ToString())); 
     } 
     else 
     { 
      //Report error 
     } 
    } 

    conn.Close(); 
    } 
    catch() 
    { 
    MessageBox.Show("No data"); 
    } 
} 

В этом коде здесь, это держит моя система получает сообщение об ошибке:

str1 = String.Concat(str1, (dataTable.Rows[0]["Score"].ToString())); 

получение имени и оценки «qwe» и «20» в порядке; , но во втором столбце «keith» и «0». Мой код flag меня к ошибке «Нет строки в позиции 0»;

Что, по-видимому, является проблемой метода string.concat()?

+1

Это проблема 'datatable.Rows [0]' не строки .concat. Убедитесь, что ваш запрос возвращает данные в вашем datatable для имени «Keith» –

+1

Это не проблема с этим методом. Ваш SQL-запрос просто не возвращает никаких данных, поэтому у вас нет строк в таблице. Кроме того, если вы просто загружаете данные из базы данных, не используйте 'DataTable', это очень неэффективно. Просто используйте 'IDataReader'. –

+0

или использовать метод .Fill или проверить ссылку MSDN для метода [DataTable.Load] (https://msdn.microsoft.com/en-us/library/hsze9wte (VS.80) .aspx) – MethodMan

ответ

1

Используйте этот код

using (SqlConnection conn = new SqlConnection("Data Source=Rogue;Initial Catalog=SoftProject;Integrated Security=True")) 
{ 
conn.Open(); 
try 
{ 
String str1 = ""; 
using (SqlCommand cmd = new SqlCommand("Select PlayerName,Score from PlayerData where PlayerName = @player", conn)) 
{ 
    cmd.Parameters.AddWithValue("@player", txtPlayer.Text); 
    DataSet ds= new DataSet(); 
    SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
    adapter.Fill(ds); 

    if(ds.Tables[0].Rows.Count>0) 
    { 
     // concatenate the two string and get the table score row 
     str1 += ds.Tables[0].Rows[0]["Score"].ToString(); 
    } 
    else 
    { 
     //Report error 
    } 
    } 

    conn.Close(); 
    } 
    catch() 
    { 
    MessageBox.Show("No data"); 
    } 
} 
0

Попробуйте это:

if(dt.Rows.Count>0) 
{ 
str1 = String.Concat(str1, (dataTable.Rows[0]["Score"].ToString())); 
} 
+0

Я уже пробовал этот код сэр (см. Выше), но условие переходит к методу catch и не сообщает никаких данных. –

+0

Что такое количество строк, которое вы получаете? – Mainak

+0

Вторая строка счёта сэр '0' –

1

иСПользоВание только SqlDataReader достаточно

using (SqlConnection conn = new SqlConnection("Data Source=Rogue;Initial Catalog=SoftProject;Integrated Security=True")) 
     {   
      conn.Open(); 
      try 
      { 
       String str1 = ""; 
       using (SqlCommand cmd = new SqlCommand("Select PlayerName,Score from PlayerData where PlayerName = @player", conn)) 
       { 
        cmd.Parameters.AddWithValue("@player", txtPlayer.Text); 
        SqlDataReader reader = cmd.ExecuteReader(); 

        if(reader.Read()) 
        { 
         str1 = String.Concat(str1, reader.GetString(reader.GetOrdinal("Score"))); 
        } 
        else 
        { 

        } 
       } 
       conn.Close(); 
      } 
      catch 
      { 

      } 

     } 
+0

Если вы уверены, что он возвращает только одну строку, используйте условие if. Если возвращено несколько строк, используйте цикл while и прочитайте каждую строку. while (reader.Read() {reader.GetString (reader.GetOrdinal («Оценка»))}) – Shetty

Смежные вопросы