2010-04-15 55 views
0

當我查詢只有一個記錄/行時,sqldatareader正在給出正確的結果,但是當我查詢多行時,它在客戶端提供錯誤。下面是我的代碼。請告訴我這裏有什麼問題。無法從sqldatareader讀取多行

[WebMethod] 
    public static string SendMessage(string order) 
    { 
      string Server = "alyeyey"; 
      string Username = "apjsjsjs"; 
      string Password = "jjsjsjs"; 
      string Database = "Amhshshs"; 

      string ConnectionString = "Data Source=" + Server + ";"; 
      ConnectionString += "User ID=" + Username + ";"; 
      ConnectionString += "Password=" + Password + ";"; 
      ConnectionString += "Initial Catalog=" + Database; 
      string query = "select * from optionsRelation where orderNumber = " + order;//+" OR orderNumber = 17"; 

      DataTable dt = new DataTable(); 

      Hashtable sendData = new Hashtable(); 

     try 
      { 
      using (SqlConnection conn = new SqlConnection(ConnectionString)) 
      { 
       using (SqlCommand cmd = new SqlCommand(query, conn)) 
       { 
        conn.Open(); 
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
        dt.Load(dr); 
       } 
      } 

      //Creating StringBuilder array for storing keys 
      StringBuilder[] empKeys = new StringBuilder[4]; 

      for (int i = 0; i < empKeys.Length; i++) 
      { 
       empKeys[i] = new StringBuilder(); 
      } 

      //Creating stringbuilder array for storing key values 
      StringBuilder[] empDetails = new StringBuilder[4]; 

      for (int i = 0; i < empDetails.Length; i++) 
      { 
       empDetails[i] = new StringBuilder(); 
      } 

      //putting datatable data to Keys array i-e empKeys and Values array i-e empDetails array 
      int inc = 0; 
      int j = 0; 
      foreach (DataRow dr in dt.Rows) 
      { 
       foreach (DataColumn dc in dt.Columns) 
       { 
        empKeys[inc].Append(dc.ColumnName); 
        inc++; 
       } 
       foreach (DataColumn dc in dt.Columns) 
       { 
        empDetails[j].Append(dr[dc]); 
        j++; 
       } 
      } 

      //mapping keys array and values array in hashtable 

      for (int k = 0; k < empKeys.Length; k++) 
      { 
       sendData.Add(empKeys[k].ToString(), empDetails[k].ToString()); 
      } 
      //sendData.Add("orderNum", order); 
      JavaScriptSerializer jss = new JavaScriptSerializer(); 
      string output = jss.Serialize(sendData); 
      return output; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message + "-" + ex.StackTrace; 
     } 
    } 
} 
+0

你會得到什麼錯誤? – Harv 2010-04-15 21:19:59

+0

請指定你得到的錯誤。在瀏覽器上發生錯誤 – 2010-04-15 21:21:03

+0

錯誤:預期']' – amby 2010-04-15 21:41:49

回答

0

是這樣的嗎?儘管如此,這並不能解決你的客戶端錯誤。它使用參數而不是字符串連接。

string query = "select * from Customer_Order where orderNumber = @ordernumber"; 

    DataTable dt = new DataTable(); 

    using (SqlConnection conn = new SqlConnection(ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand(query, conn)) 
     { 
      cmd.Parameters.Add(new SqlParameter("ordernumber", ordernumber)); 
      SqlDataAdapter dr = new SqlDataAdapter(cmd); 
      dr.Fill(dt); 
     } 
    } 
+0

也許更像是:新的SqlParameter(「@ ordernumber」,SqlDbType.Int).Value = ordernumber – Brandi 2010-04-15 22:31:09

+0

@Brandi在我的例子中,SqlDBType是從對象的.Net框架類型中推斷出來的。我不確定什麼類型的對象「訂單」是。 – Germ 2010-04-15 22:47:25

0

發生o客戶端錯誤,但這是因爲數據來自服務器端。因爲我已經覈實了向這個客戶端發送不同的值,並且這些值正常工作。即使當我使用查詢字符串只有一行像「select * from table where orderNumber = 17」,它工作正常。但在查詢多行時發生錯誤。而「order」是從jquery ajax調用傳遞的字符串參數(並且我已經檢查過「order」包含正確的字符串,所以沒有問題)。我正在使用empKeys和empDetails數組來保存數據表值以將它們轉換爲哈希表,因爲我必須以json格式將數據發送到JavaScript,並且只使用哈希表,我成功地完成了這項工作。以下是我的整個服務器端代碼:

using System.Web.UI.WebControls; 
using System.Web.Services; 
using System.Data; 
using System.Text; 
using System.Web.Script.Serialization; 
using System.Web.Script.Services; 
using System.Collections; 
using System.Data.SqlClient; 

public partial class orderSearch : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e){} 


    [WebMethod] 
    public static string SendMessage(string order) 
    { 
      string Server = "alyeyey"; 
      string Username = "apjsjsjs"; 
      string Password = "jjsjsjs"; 
      string Database = "Amhshshs"; 

      string ConnectionString = "Data Source=" + Server + ";"; 
      ConnectionString += "User ID=" + Username + ";"; 
      ConnectionString += "Password=" + Password + ";"; 
      ConnectionString += "Initial Catalog=" + Database; 
      string query = "select * from optionsRelation where orderNumber = " + order;//+" OR orderNumber = 17"; 

      DataTable dt = new DataTable(); 

      Hashtable sendData = new Hashtable(); 

     try 
      { 
      using (SqlConnection conn = new SqlConnection(ConnectionString)) 
      { 
       using (SqlCommand cmd = new SqlCommand(query, conn)) 
       { 
        conn.Open(); 
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
        dt.Load(dr); 
       } 
      } 

      //Creating StringBuilder array for storing keys 
      StringBuilder[] empKeys = new StringBuilder[4]; 

      for (int i = 0; i < empKeys.Length; i++) 
      { 
       empKeys[i] = new StringBuilder(); 
      } 

      //Creating stringbuilder array for storing key values 
      StringBuilder[] empDetails = new StringBuilder[4]; 

      for (int i = 0; i < empDetails.Length; i++) 
      { 
       empDetails[i] = new StringBuilder(); 
      } 

      //putting datatable data to Keys array i-e empKeys and Values array i-e empDetails array 
      int inc = 0; 
      int j = 0; 
      foreach (DataRow dr in dt.Rows) 
      { 
       foreach (DataColumn dc in dt.Columns) 
       { 
        empKeys[inc].Append(dc.ColumnName); 
        inc++; 
       } 
       foreach (DataColumn dc in dt.Columns) 
       { 
        empDetails[j].Append(dr[dc]); 
        j++; 
       } 
      } 

      //mapping keys array and values array in hashtable 

      for (int k = 0; k < empKeys.Length; k++) 
      { 
       sendData.Add(empKeys[k].ToString(), empDetails[k].ToString()); 
      } 
      //sendData.Add("orderNum", order); 
      JavaScriptSerializer jss = new JavaScriptSerializer(); 
      string output = jss.Serialize(sendData); 
      return output; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message + "-" + ex.StackTrace; 
     } 
    } 
} 
+0

你是字符串數組擁有4個值,在你的情況下是4列名。你不能附加到empKeys [5] ... – Germ 2010-04-16 18:14:51

0

試試這個...我認爲這仍然有錯誤的JSON輸出,但它會給你的想法。請參閱Rick Strahl關於converting a datatable to json的文章。這比我的例子稍微複雜一些。

  List<Hashtable> sendData = new List<Hashtable>(); 

      foreach (DataRow dr in dt.Rows) 
      { 
       foreach (DataColumn dc in dt.Columns) 
       { 
        Hashtable ht = new Hashtable(); 
        ht.Add(dc.ColumnName, dr[dc].ToString()); 
        sendData.Add(ht); 
       } 
      }