iT邦幫忙

0

C# DataSet 轉JSON 問題請教

  • 分享至 

  • xImage

您好:
如下程式碼,
我DEBUG 有看到她在跑 dataRow[i] = reader[i]; 這一段

但最後,回傳卻是 NULL,
請問是否哪一段有問題!

謝謝!

public Object doexecZ(object[] objParam)

        {

 

            string paraX = (string)objParam[0];

 

            JArray jarr = JArray.Parse(paraX);
 

            string dlvno = "";
        

            string[] rtn_X;


            string retval = ""; // 要回前端的值

            string _db = this.GetClientInfo(ClientInfoType.LoginDB).ToString(); //抓取client端登入的DB

            _Conn = doConn.GetWebConnStr(_db); //將回傳的參數(連線哪個DBString)帶入_Conn中   

            SqlConnection conn = new SqlConnection(_Conn);

            SqlCommand cmd = new SqlCommand(string.Empty, conn);

            conn.Open();


            SqlParameter rtn;

 
            //------回傳陣列用

            DataSet ds = new DataSet("dataSet"); //建立DataSet

           // DataTable table = new DataTable(); //建立DataTable

 
            //DataSet加入Table

            //ds.Tables.Add(table);

 
            foreach (JObject json in jarr)

            {

                dlvno = json.GetValue("dlvno")?.ToString() ?? "";

         

 

                cmd.Parameters.Clear();

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = @"select

                                     * from xx 

                                    WHERE dlvno = @dlvno_para ";

                cmd.Parameters.Add("@dlvno_para", SqlDbType.VarChar, 12).Value = dlvno;

 

                int ct = 0;

                CommandBehavior behavior = CommandBehavior.SequentialAccess;

 

                IDataReader reader = cmd.ExecuteReader(behavior);

                using (ds )

                {

                    do

                    {

                        DataTable dtSchema = reader.GetSchemaTable();

 

                        DataTable dt = new DataTable();

                      

                        if (dtSchema != null)

                        {

                            foreach (DataRow drow in dtSchema.Rows)

                            {

                                string columnName = System.Convert.ToString(drow["ColumnName"]);

                                DataColumn column = new DataColumn(columnName, (Type)(drow["DataType"]));

                                dt.Columns.Add(column);

                            }

                        }

                      

                        while (reader.Read())

                        {

                            DataRow dataRow = dt.NewRow();

                            for (int i = 0; i <= reader.FieldCount - 1; i++)

                            {

                                dataRow[i] = reader[i];

                                Console.WriteLine(reader[i]);

                            }

                           dt.Rows.Add(dataRow);

                            ct++;

                        }

                        ds.Tables.Add(dt);

                    } while (reader.NextResult());

                    reader.Close();

                }

 

 

                if (ct ==0)

                {

 

                    break;  //非0,PROC 處理有問題,跳出

                }//--if

 

 

            }//---foreach

 

            //---將剛才的資料轉成 STRING

            string json_rtn = JsonConvert.SerializeObject(ds);

 

 

 

            conn.Close();

            conn.Dispose();

 

 

 

 

 

            object ret;

 

            ret = new object[] { 0, json_rtn };  //只能放在此處回傳

            return ret;

 

 

        }
PPTaiwan iT邦好手 1 級 ‧ 2021-06-30 21:23:00 檢舉
你的問題也是給大家猜猜看你的錯誤!!

另外一點,你使用的是 SQL 嗎?? 如果你使用的 SQL 可以支援導出 JSON 的話就試著用用看吧!! 節省很多程序..
powerc iT邦研究生 5 級 ‧ 2021-07-01 08:55:41 檢舉
用try...catch看看有沒有錯
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
japhenchen
iT邦超人 1 級 ‧ 2021-07-01 15:35:47
最佳解答

我怎麼覺得你寫了好多,Linq只要用兩三行就能解決的事?

using Newtonsoft.Json;

protected void Page_Load(object sender, EventArgs e)
    DataContext1 myDC = new DataContext1();
    var data = (from p in myDC.MemberTable
               where p.name.Contains("陳")
               select p ).ToArray();
    Response.Write(JsonConvert.SerializeObject(data));
    Response.Flush();
    Response.End();    
}

重點不是如何轉json,而是你的資料....如果這麼辛苦從recordset轉dataset.datatable,會不會太辛苦了些?用Linq+Lambda不香嗎?

noway iT邦研究生 1 級 ‧ 2021-07-02 21:49:20 檢舉

您好: 謝謝! 沒用過linQ, 且套裝模組不知可否用!
順便一問,是否有較前顯異動的 C# DATA 的關聯 與組合運用說明可分享?

你可以新增一個測試專案,伺服器管理員裡加入你要連接的資料庫(有精靈可設定),,再回到專案,在裡面新增一個Linq to SQL的項目,然後你會發現有個空白的畫面可以加入TABLE、STORED PROCEDURE、VIEW,就把你剛剛加入到伺服器管理員的DB-TABLE用滑鼠拉進來,然後你應該可以回到我最開頭的那段語法,而不要用record來兜語法了

至於套裝環境可不可以用?Linq 是內建的,其實很多領域都用上了Linq,不只是SQL,像是List、Array、甚至對實體可見物件也可以用Linq,如GridView、ListView,都可以用Linq來篩選你要的內容或做進一步的資料寫入,就看你如何用了

我要發表回答

立即登入回答