2014-10-22 103 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 2014-10-22 04:18:46

+0

@Seminda你認爲SqlDataAdapter導致問題? – 2014-10-22 04:30:29

+0

不,但如果你只需要一列,那麼ExecuteScalar就在你身邊。它會讓你的代碼更加簡單,並且你可以很容易地識別你的問題。 – Seminda 2014-10-22 22:01:06

回答

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')必須打開和關閉,而不是for循環之外的第一個連接('con')。如此,現在系統運行成功而不產生任何輸出。 – 2014-10-22 05:09:39

+0

您的解決方案無法使用。對不起 – 2014-10-22 05:20:38

+0

什麼不起作用?你有更多的信息嗎?沒有評論,你的代碼很難讀... – BendEg 2014-10-22 05:52:22