0

Visual Studio 2010 で Web サービスを構築します。言語は C# と ASP.NET 3.5 です。

Web サーバーは、ms sql サーバー 2008 から JSON 形式で iPhone にデータを送信します。

しかし、SQL Server からのすべてのデータを含む 1 つの文字列値を受け取ります。iPhone でデータをより適切に使用できるように、Web サービスがデータを個別に送信してくれることを望みます。

ここに私のC#クラスがあります:

   namespace WebService1
{
    public class RaumklassenHelper
    {



        internal static string Raumklasse()
        {
            string raumKlassenObject = "";

            using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
            using (SqlCommand cmd = new SqlCommand(@"SELECT BEZEICHNUNG FROM RAUMKLASSE", con))
            {

                con.Open();
                using (SqlDataReader rdr = cmd.ExecuteReader())
                {


                    while (rdr.Read())
                    {
                        if (rdr["BEZEICHNUNG"]  != DBNull.Value)
                         {

                              raumKlassenObject += rdr["BEZEICHNUNG"].ToString();
                         }

                    }


                }
            }

            return raumKlassenObject;
        }
    }
}

これが私のWebメソッドです:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        [WebMethod]
        public string Raumklasse()
        {
            return RaumklassenHelper.Raumklasse();
        }

どのように文字列をばらばらに送信できますか?

4

2 に答える 2

0

配列を返すことができます:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string[] Raumklasse()
{
    return RaumklassenHelper.Raumklasse();
}

そして明らかにデータ取得方法を適応させます:

public class RaumklassenHelper
{
    internal static string[] Raumklasse()
    {
        List<string> raumKlassenObject = new List<string>();

        using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
        using (SqlCommand cmd = new SqlCommand(@"SELECT BEZEICHNUNG FROM RAUMKLASSE", con))
        {
            con.Open();
            using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    if (rdr["BEZEICHNUNG"] != DBNull.Value)
                    {
                        raumKlassenObject.Add(rdr["BEZEICHNUNG"].ToString());
                    }
                }
            }
        }
        return raumKlassenObject.ToArray();
    }
}
于 2012-05-31T15:35:29.963 に答える
0

結果を DataTable に読み込んでから、linq を使用して結果セットをクエリすると、json 形式の応答を非常に簡単に返すことができることがわかりました。

namespace WebService1
{
 public class RaumklassenHelper
 {
    internal static string Raumklasse()
    {
        DataTable tbl = new DataTable();
        JavaScriptSerializer js = new JavaScriptSerializer();
        StringBuilder sb = new StringBuilder();

        using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
        using (SqlCommand cmd = new SqlCommand(@"SELECT BEZEICHNUNG FROM RAUMKLASSE", con))
        {

            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            tbl.Load(rdr);
            rdr.Close();
            var linqResults = from DataRow row in tbl.AsEnumerable()
                              select new { raumKlassenObject = row.Field<string>("BEZEICHNUNG") };
            js.Serialize(linqResults, sb);
            string returnJSON = sb.ToString();
            return returnJSON;
        }
    }
}
}
于 2012-05-31T18:34:29.817 に答える