2014-10-22 3 views
0

다음 프로그램은 SQL Server 2008 테이블에서 데이터를 추출하고 for 루프를 적용하고 총 레코드 수를 계산합니다. 프로그램은 오류없이 성공적으로 컴파일되고 실행되지만 총 레코드 수는 화면에 인쇄되지 않습니다. 아무것도 인쇄하지 않습니다. .cs (코드 뒤에)입니다 :오류없이 프로그램이 실행되지만 원하는 출력이 제공되지 않음

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Data; 
namespace CountDocs 
{ 
    public partial class Home : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     protected void btnCount_Click(object sender, EventArgs e) 
     { 
      SqlConnection con = new SqlConnection("Data Source=MEHDI-PC\\SQLEXPRESS; Initial Catalog=PIMS; Integrated Security=true;"); 
      { 
       using (SqlCommand cmd = new SqlCommand()) 
       { 
        String sql = "select * from dbo.Company"; 
        cmd.Connection = con; 
        cmd.CommandText = sql; 
        con1.Open(); 
        Int32 Total = 0; 
          Total = (Int32)cmd1.ExecuteScalar(); 
          Console.WriteLine(Total); 
        if (con.State == ConnectionState.Open) 
        { 
         con.Close(); 
        } 
        for (int i = 0; i < dt.Rows.Count; ++i) 
        { 
         string companyname; 
         companyname = dt.Rows[i].ItemArray[0].ToString(); 
         SqlConnection con1 = new SqlConnection("Data Source=MEHDI-PC\\SQLEXPRESS; Initial Catalog=PIMS; Integrated Security=true;"); 
         { 
          using (SqlCommand cmd1 = new SqlCommand()) 
          { 
           String sql1 = "select Count(*) from dbo.Documents where Src=" + "'" + companyname + "'"; 
           cmd1.Connection = con1; 
           cmd1.CommandText = sql1; 
           con.Open(); 
           DataTable dt1 = new DataTable(); 
           Int32 Total = 0; 
           Total = (Int32)cmd1.ExecuteScalar(); 
           Console.WriteLine(Total); 
           if (con.State == ConnectionState.Open) 
           { 
            con.Close(); 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

프로그램은 구문 오류를 던지고되지 않기 때문에, 나는 그것이 논리적 오류 일 수 있습니다 같아요. 누군가 제발 날 알아 차릴 수 있을까요? 미리 감사드립니다.

+1

cmd1.ExecuteScalar를 사용하십시오. SqlDataAdapter를 사용할 필요가 없습니다. ExecuteScalar - 쿼리를 실행하고 쿼리에서 반환 된 결과 집합의 첫 번째 행의 첫 번째 열을 반환합니다. – Seminda

+0

@Seminda SqlDataAdapter가 문제의 원인이라고 생각하십니까? –

+0

아니요. 단 하나의 열만 있으면 ExecuteScalar가 나타납니다. 그것은 당신의 코드를 더 간단하게 만들 것이고 당신은 당신의 문제를 매우 쉽게 식별 할 수 있습니다. – Seminda

답변

1

dt1.Rows [0] .ToString()을 쓰면 셀 값을 가져올 수 없으므로 시스템이 올바르게 작동합니다. 이는 System.Data.DataRowSystem.Data.DataRowSystem.Data.DataRowSystem.Data.DataRowSystem이 ToString() 메서드를 재정의하지 않기 때문입니다.

난 당신이 도움이 dt1.Rows[0].ItemArray[3] 또는 dt1.Rows[0]["column name"].ToString();

희망을 사용해야합니다 생각합니다.

+0

내 눈이 방금 오류를 잡았습니다. for 루프 ('con1') 내부의 두 번째 연결은 for 루프 외부에있는 첫 번째 연결 ('con')보다는 열리고 닫혀 야합니다. 그랬더니, 이제 시스템은 출력을 생성하지 않고 성공적으로 실행됩니다. –

+0

솔루션이 작동하지 않습니다. 죄송합니다. –

+0

무엇이 작동하지 않습니까? 좀 더 자세한 정보가 있습니까? 코멘트가 없으면 코드를 읽기가 어렵습니다. – BendEg

관련 문제