首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将String属性传递给WCF并返回数据集?

如何将String属性传递给WCF并返回数据集?
EN

Stack Overflow用户
提问于 2018-12-23 01:13:06
回答 2查看 211关注 0票数 0

程序返回System.Data.DataSet.我要返回数据集的项。

我有一个包含4个表的数据库:BandsFestivalsStages;以及一个连接表- Band_Festival

sql查询在执行时全部工作,表单上的DataGridView显示正确的记录。

我试图让WCF检索数据并将一个DataSetlist<DataSet>返回到表单中。

在进行调用时,表单上选定的ComboBox项应传递给wcf,后者用作SQL的参数。

String Festivals {get; set;} ComboBox.SelectedItem = Festivals

用于将参数传递给sql查询。

当sql的WHERE条件是"System.Data.DataSet",时,调用返回festival_name = 'Boomtown Fair',我想要条目列表。当条件为festival_name = @festivalParameters.AddValue("@festival", Festivals)时,会抛出带有“参数未提供”的异常

下面是一些代码:

表单

代码语言:javascript
复制
String Festivals { get; set; }

    FestivalsBandsServiceReference.FestivalBandsServiceClient ws = null;
    public Form1()
    {
        InitializeComponent();
        ComBoxFestivals.SelectedItem = Festivals;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        ws = new FestivalsBandsServiceReference.FestivalBandsServiceClient();
    }
    private void comBoxFestivals_SelectedIndexChanged(object sender, EventArgs e)
    {

        List<String> festival = ws.GenerateNewBandList(Festivals);

        Console.WriteLine(String.Join("," ,festival));
    }

FestivalBandsService.svc.cs

代码语言:javascript
复制
public List<DataSet> GenerateNewBandList(String Festivals)
    {

        List<DataSet> bands = new List<DataSet>();

        string dataSource = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = " +
                       @"D:\WCFFestivalBands\WCFFestivalBands\App_Data\FestivalBands.mdf; Integrated Security = True; Connect Timeout = 30";


        //Create new instance of sql connection, pass in the connection string for FestivalBands.mdf to connect to database.
        SqlConnection conn = new SqlConnection(dataSource);

        string sqlQuerySelectBands = "SELECT Bands.Band_Name FROM Band_Festival JOIN dbo.Bands ON Bands.Band_ID =" +
                                  "Band_Festival.Band_ID JOIN dbo.Festival ON Festival.Festival_ID " +
                                  "= Band_Festival.Festival_ID WHERE Festival_Name = @festival";

        SqlCommand cmd = new SqlCommand(sqlQuerySelectBands, conn);
        cmd.Parameters.AddWithValue("@festival", Festivals);

        conn.Open();

        //Create new instance of DataAdpater to retrieve the data pass in Sql command
        SqlDataAdapter da = new SqlDataAdapter(cmd);

        //Create new instance of dataSet to hold the data retrieved from sql query
        DataSet ds = new DataSet();

        //using DataAdapter fill in dataSet wiht data if user input and stored data matches
        da.Fill(ds);

        bands.Add(ds);

        return bands;
    }
}

IFestivalBandsService.cs

代码语言:javascript
复制
     [ServiceContract]
public interface IFestivalBandsService
{ 
    [OperationContract]
    List<DataSet> GenerateNewBandList(String Festivals);
}

这是很新的。只是刚刚学会了如何使用WCF传递和返回值。从dataSet传递列表是下一个级别。任何帮助都是非常感谢的。

我没有添加表、列或行,不确定它是否相关?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-24 09:40:58

根据您的代码片段,我在本地复制和测试它,您的WCF服务器端似乎没有错误。否则,当硬编码SQL语句查询数据库时,它将不会成功。但是,当您在客户端使用服务时,我找不到您初始化节日属性的进程。

字符串节日{ get;set;} ComBoxFestivals.SelectedItem =节日;

这些代码片段可能是造成您的问题的原因。

在.net 4.6+中,您可以引用以下代码来设置属性的默认设置。

代码语言:javascript
复制
public int Price { get; set; } = 100;

或者您可以参考以下代码。

代码语言:javascript
复制
    class Product
    {
        private string name = "Apple";
        public int ID { get; set; }
        public string Name
        {
            get { return name; }
            set { this.name = value; }
        }
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-23 02:16:32

我怀疑您能否从WCF返回一个List<DataSet>,DataSet可能是任何东西,而且它不知道如何序列化它。

我们用于传输的是使用DTO (数据传输对象)。基本上,这只是一种奇特的说法:创建一个具体的类,并确保它被标记为DataContract属性,并且每个属性都在适当的地方使用DataMember属性进行标记。E.g

代码语言:javascript
复制
[DataContract]
public class PurchaseOrder
{

    // Apply the DataMemberAttribute to the property.
    [DataMember]
    public int PurchaseOrderId { get; set
}

在这里读到更多关于他们的信息

使用数据契约

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53900487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档