2014-10-22 2 views
0

После выполнения программы извлекает данные из таблиц SQL Server 2008, применяет простой цикл и подсчитывает общее количество записей. Программа компилируется и запускается без ошибок, но не выводит общее количество записей на экран. Он ничего не печатает. .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

Мой глаз только что поймал ошибку. Второе соединение внутри цикла ('con1') должно быть открыто и закрыто, а не первое соединение (' con'), которое находится за пределами цикла for. Так, теперь система успешно работает без какого-либо выхода. –

+0

Ваше решение не работает. Извините –

+0

Что не работает? У вас есть дополнительная информация? Без комментариев ваш код трудно читать ... – BendEg