2013-07-01 477 views
0

我想查詢數據庫,並把它當作在asp.net JSON對象MVC 4後顯示信息給用戶SQL服務器查詢

我能想到的傳遞是如下的唯一途徑:

public JsonResult Search() 
    { 

      SqlCommand myCommand = new SqlCommand("Select * from table", 
                myConnection); 


      SqlDataReader myReader = myCommand.ExecuteReader(); 
      while (myReader.Read()) 
      { 
       //Col1-7 are lists 
       Col1.Add(myReader["Column1"].ToString()); 
       Col2.Add(myReader["Column2"].ToString()); 
       Col3.Add(myReader["Column3"].ToString()); 
       Col4.Add(myReader["Column4"].ToString()); 
       Col5.Add(myReader["Column5"].ToString()); 
       Col6.Add(myReader["Column6"].ToString()); 
       Col7.Add(myReader["Column7"].ToString()); 
      } 
     return Json(new {Col1, Col2, Col3, Col4, Col5, Col6, Col7}); 
    } 

唯一的問題是我並不想用這個沉重的客戶端,並通過這樣做,而不是保存數據表作爲緊湊型數據庫,我將其保存爲一堆名單。這種方法是否會破壞試圖不在客戶端保存太多數據的目的(因爲我無論如何,只是不使用SqlServerCe),如果有的話,是否有更好的方法來做到這一點?

+0

1)你需要你的Col1中,COL7其他地方,但在你的JSON? 2)你真的需要客戶端上的整個表嗎? –

+0

我需要顯示數據表,以便用戶可以選擇他想要的某些行,稍後我不需要Col1-Col7。 – Torquad333

+0

這可能是你想要的:http://www.west-wind.com/weblog/posts/2009/Apr/24/JSON-Serialization-of-a-DataReader –

回答

0

如果返回JsonResult,使用此:

JsonResult retVal = new JsonResult(); 
... 
retVal.Data = new { col1 = Col1, ....}; 
return retVal; 

讓我知道,如果它幫助。

0

我不完全理解你的問題。我能做的是,你不想在客戶端向用戶顯示太多的信息?

雖然試圖回答你的問題,我也要指出一些問題。

不要像您從控制器那樣進行數據檢索。而是使用服務層或存儲庫來恢復數據。比方說,你要帶回所有的用戶在你的數據庫的話,我會做這樣的(只是返回你所需要的,其餘的你可以離開了):

public ActionResult GetAllUsers() 
{ 
    List<User> users = userService.FindAll(); 

    var result = 
      from user 
      in users 
      select new[] 
      { 
       user.Id.ToString(), 
       user.FirstName, 
       user.LastName, 
       user.Age.ToString() 
      }; 

      return Json(result, JsonRequestBehavior.AllowGet); 
} 

你可以把所有這一切到你的UserService類:

SqlCommand myCommand = new SqlCommand("Select * from table", myConnection); 

SqlDataReader myReader = myCommand.ExecuteReader(); 
while (myReader.Read()) 
{ 
    //Col1-7 are lists 
    Col1.Add(myReader["Column1"].ToString()); 
    Col2.Add(myReader["Column2"].ToString()); 
    Col3.Add(myReader["Column3"].ToString()); 
    Col4.Add(myReader["Column4"].ToString()); 
    Col5.Add(myReader["Column5"].ToString()); 
    Col6.Add(myReader["Column6"].ToString()); 
    Col7.Add(myReader["Column7"].ToString()); 
} 

注入您的IUserService接口到控制器:

public class UserController : Controller 
{ 
    private readonly IUserService userService; 

    public UserController(IUserService userService) 
    { 
      this.userService = userService; 
    } 

    // The rest of your action methods goes here, including GetAllUsers() 
}