2016-07-11 26 views
0

他们必须是我的代码中的某处的一个小错误,即使我没有看到为什么在我的网页上,当我知道查询时,gridview只输出一行工程/ASP.NET Gridview不输出特定查询的所有数据

Both rows from management studio

Only one row in ASP page

我的继承人C#

string AdminID = Request.QueryString["ID"]; 
string AdminsCurrentLocation = Request.QueryString["Location"]; 
//retrieve admin location 

    try 
    { 
     string connectionString = "Data Source=SQL5027.HostBuddy.com;Initial Catalog=DB_A05369_WATERQ;User Id=DB_A05369_WATERQ_admin;Password=waterqws1"; 
     // 
     // Create new SqlConnection object. 
     // 
     using (SqlConnection connection5 = new SqlConnection(connectionString)) 
     { 


      connection5.Open(); 

      using (SqlCommand command = new SqlCommand("SELECT * FROM [DB_A05369_WATERQ].[dbo].[S_CONTROL] WHERE LOGIN = '" + AdminID + "'", connection5)) 
      { 
       // 
       // Invoke ExecuteReader method. 
       // 
       using (SqlDataReader reader2 = command.ExecuteReader()) 
       { 
        reader2.Read(); 
        TempLocationIdbox.Text = (reader2["ALL_LOCATION_ACCESS"].ToString()); 
       } 

      } 
      connection5.Close(); 
     } 
    } 
    catch (Exception ex) { } 

    if(TempLocationIdbox.Text == "Y") 
    { 
     string strSQLconnection = "Data Source=SQL5027.HostBuddy.com;Initial Catalog=DB_A05369_WATERQ;User Id=DB_A05369_WATERQ_admin;Password=waterqws1"; 
     SqlConnection sqlConnection = new SqlConnection(strSQLconnection); 
     SqlCommand sqlCommand = new SqlCommand("SELECT DISTINCT ACT.ROW_ID , ACT.CREATED , MEM.FIRST_NAME , MEM.LAST_NAME , LOC.NAME , CAT.NAME , SER.NAME , EMP.FIRST_NAME , EMP.LAST_NAME , SER.DURATION , ACT.CASH , COS.NAME , ACT.COMMENTS FROM " + 
               "S_ACTIVITY ACT, S_LOCATION LOC, S_CATEGORY CAT, S_EMPLOYEE EMP, S_SERVICE SER, S_COST_CODE COS, S_MEMBER MEM " + 
               "WHERE ACT.EMPLOYEE_ID = EMP.ROW_ID AND ACT.SERVICE_ID = SER.ROW_ID AND ACT.CATEGORY_ID = CAT.ROW_ID AND ACT.COST_CODE_ID = COS.ROW_ID AND ACT.LOCATION_ID = LOC.ROW_ID AND ACT.MEMBER_ID = MEM.ROW_ID", sqlConnection); 
     sqlConnection.Open(); 

     SqlDataReader reader = sqlCommand.ExecuteReader(); 

     //collect rowID 
     string retrievedROWID = ""; 

     if (reader.HasRows) 
     { 
      reader.Read(); 
      string temp1 = reader["ROW_ID"].ToString(); 
      retrievedROWID = temp1; 
      GridView1.DataSource = reader; 
      GridView1.DataBind(); 
     } 

     sqlConnection.Close(); 
    } 
    else if (TempLocationIdbox.Text == "N") 
    { 
     string strSQLconnection1 = "Data Source=SQL5027.HostBuddy.com;Initial Catalog=DB_A05369_WATERQ;User Id=DB_A05369_WATERQ_admin;Password=waterqws1"; 
     SqlConnection sqlConnection1 = new SqlConnection(strSQLconnection1); 
     SqlCommand sqlCommand1 = new SqlCommand("SELECT * FROM S_LOCATION WHERE NAME = '" + AdminsCurrentLocation + "'", sqlConnection1); 
     sqlConnection1.Open(); 

     string locationrowID = ""; 
     SqlDataReader reader12 = sqlCommand1.ExecuteReader(); 

     if (reader12.HasRows) 
     { 
      reader12.Read(); 
      locationrowID = reader12["ROW_ID"].ToString(); 
     } 

     sqlConnection1.Close(); 

     string strSQLconnection = "Data Source=SQL5027.HostBuddy.com;Initial Catalog=DB_A05369_WATERQ;User Id=DB_A05369_WATERQ_admin;Password=waterqws1"; 
     SqlConnection sqlConnection = new SqlConnection(strSQLconnection); 
     SqlCommand sqlCommand = new SqlCommand("SELECT DISTINCT ACT.ROW_ID , ACT.CREATED , MEM.FIRST_NAME , MEM.LAST_NAME , LOC.NAME , CAT.NAME , SER.NAME , EMP.FIRST_NAME , EMP.LAST_NAME , SER.DURATION , ACT.CASH , COS.NAME , ACT.COMMENTS FROM "+ 
           "S_ACTIVITY ACT, S_LOCATION LOC, S_CATEGORY CAT, S_EMPLOYEE EMP, S_SERVICE SER, S_COST_CODE COS, S_MEMBER MEM "+ 
           "WHERE ACT.EMPLOYEE_ID = EMP.ROW_ID AND ACT.SERVICE_ID = SER.ROW_ID AND ACT.CATEGORY_ID = CAT.ROW_ID AND ACT.COST_CODE_ID = COS.ROW_ID AND "+ 
           "ACT.LOCATION_ID = '"+ locationrowID + "' AND ACT.MEMBER_ID = MEM.ROW_ID AND LOC.NAME = '"+ AdminsCurrentLocation + "'", sqlConnection); 
     sqlConnection.Open(); 

     SqlDataReader reader = sqlCommand.ExecuteReader(); 

     //collect rowID 
     string retrievedROWID = ""; 

     if (reader.HasRows) 
     { 
      reader.Read(); 
      string temp1 = reader["ROW_ID"].ToString(); 
      retrievedROWID = temp1; 
      GridView1.DataSource = reader; 
      GridView1.DataBind(); 
     } 

     sqlConnection.Close(); 
    } 

我是什么树桩,我的其他查询工作正常对于TempLocationIdbox.Text ==“Y”... 谢谢,任何帮助将不胜感激。

+0

您只能阅读您的一行。你可能需要一个while循环来处理多行。 – mason

回答

0

而不是使用if (reader.HasRows)的,你需要使用while (reader.Read())。也创造了一些类型的集合,例如List<T>并与while loop.Then 结果内循环设置GridView控制的DataSource以点List<T>外填充它。这里是一个完整的例子:

public class Activity 
{ 
    public int RowID { get; set; } 
    public DateTime Created { get; set; } 
    public string FirstName { get; set; } 
} 

public partial class UsingSqlDataReader : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!Page.IsPostBack) 
     { 
      this.GetData(); 
     } 
    } 

    private void GetData() 
    { 
     string cs = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; 
     var activities = new List<Activity>(); 
     using (var con = new SqlConnection(cs)) 
     { 
      using(var cmd = new SqlCommand("SELECT ACT.ROW_ID,ACT.CREATED,ACT.FIRST_NAME FROM [dbo].[S_ACTIVITY] ACT", con)) 
      { 
       cmd.CommandType = System.Data.CommandType.Text; 
       con.Open(); 
       using (SqlDataReader reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         var activity = new Activity(); 
         activity.RowID = Convert.ToInt32(reader["ROW_ID"]); 
         activity.Created = DateTime.Parse(reader["CREATED"].ToString()); 
         activity.FirstName = Convert.ToString(reader["FIRST_NAME"]); 
         activities.Add(activity); 
        } 
       } 
      } 
     } 
     GridView1.DataSource = activities; 
     GridView1.DataBind(); 
    } 
} 

输出:

Populating GridView using SqlDataReader

+0

了解它与类似的时尚,tyvm :) – Rolthar

0

更好的解决方案是将您的内联查询放入存储过程并执行存储的过程。

你也可以把它放在一个数据集中,并绑定gridview。但那完全是你的选择。

联机查询非常容易出错,结果可能无法预测,因此请勿使用该查询。

+0

*内联查询非常容易出错,结果可能无法预测... *它是真的吗?如果你在存储过程中错过了该怎么办?查询OP正在执行,它与存储过程无关,更适合作为内联查询。你如何看待这个问题呢? – Rahul

相关问题