2014-11-09 5 views
1

У меня возникла проблема с базой данных ListView +.C# Listview хранимая процедура

Мой вопрос: почему мой ListView показать 2 имя пользователя столбцов и 1 электронная почта, а не имя пользователя, код, адрес электронной почты (я сделал имя пользователя, код и электронной почты столбцов в ListView по форме) ..

Вы можете просмотреть хранимую процедуру, которую я написал, и код C# ниже.

PS. Я использую Visual Studio 2012.

Я не знаю, что я делаю неправильно:/

Надежда есть простой способ сделать это :)

Моя хранимая процедура:

CREATE PROCEDURE SP_ShowFamily 
as 
    SELECT 
     username, code, email 
    FROM 
     Family 
    ORDER BY 
     username 

Когда я заставляю его запускать мой код C#, он показывает 2 раза имя пользователя и адрес электронной почты. Не "Кодекс"

Мой C# код:

public void GetData() 
{ 
     datareader = null; 

     sqlCommand.Parameters.Clear(); 
     sqlCommand.CommandText = "SP_ShowFamily"; 

     try 
     { 
      sqlConnenction.Open(); 
      datareader = sqlCommand.ExecuteReader(); 

      ListViewItem itmx; 

      while (datareader.Read()) 
      { 
       itmx = new ListViewItem(); 
       itmx.Text = datareader.GetValue(0).ToString(); 

       for (int i = 0; i < datareader.FieldCount; i++) 
       { 
        itmx.SubItems.Add(datareader.GetValue(i).ToString()); 
       } 

       listView1.Items.Add(itmx); 
      } 
     } 
     catch (SqlException ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      if (datareader != null) 
      { 
       datareader.Close(); 
      } 

      if (sqlConnenction.State == ConnectionState.Open) 
      { 
       sqlConnenction.Close(); 
      } 
     } 
    } 
+0

Сторона примечания: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –

ответ

0

Вы показываете username один раз (в первом столбце ListView) здесь:

itmx.Text = datareader.GetValue(0).ToString(); 

, а затем еще раз, когда i находится в первой 0 SubItem (вторая колонка ListView):

itmx.SubItems.Add(datareader.GetValue(i).ToString()); 

Попробуйте изменить цикл for, чтобы начать с i = 1.

0

Сначала получите столбцы DataReader и назначить их в ListView:

for(int i=0;i<datareader.FieldCount;i++) 
{ 
    ListView1.Columns.Add(datareader.GetName(i)); 
} 

Затем вставить записи данных в ListView:

string[] arr = new string[datareader.FieldCount]; 
ListViewItem itmx; 
while (datareader.Read()) 
{ 
    for(int i=0;i<datareader.FieldCount;i++) 
    { 
     arr[i]=datareader.GetValue(i).ToString(); 
    } 
    itmx = new ListViewItem(); 
    listView1.Items.Add(itmx); 
} 

Внимание: Код не тестировался и следует рассматривать как псевдо - только код.

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