2014-11-09 8 views
1

이 문제는 ListView + 데이터베이스에서 발생합니다.C# Listview 저장 프로 시저

내 질문은 : 대신에 사용자 이름, 번호, 이메일 ..

(나는 이름, 폼의 ListView 코드 및 이메일 열을 만들었습니다) 2 이름 열 및 1 이메일을 보여주는 내 ListView에 이유 아래에서 작성한 저장 프로 시저와 C# 코드를 볼 수 있습니다 ..

PS.

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

희망이 :)

내 저장 프로 시저를 할 수있는 쉬운 방법이있다 : 나는 2012 년

내가 잘못 뭘하는지 모르는 비주얼 스튜디오를 사용

C# 코드로 실행하면 사용자 이름과 이메일이 2 번 표시됩니다. 없음 "코드"

내 C# 코드 : 당신은 여기 (첫 번째의 ListView 열에서) 한 번 username를 표시하는

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

:

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

후 다시 i 처음에 0입니다 SubItem (두 번째 ListView 열) :

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

for 루프를 변경하여 i = 1에서 시작하십시오.

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

은 그 다음의 ListView에 데이터 레코드를 삽입 : DataReader를 열을 얻고있는 ListView에 할당

0

먼저

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); 
} 

주의 : 코드가 안된와 의사로 간주되어야한다 - 코드 만.