gpt4 book ai didi

c# - WCF 服务返回数据集

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:30 25 4
gpt4 key购买 nike

我有这个 WCF 服务:

public DataSet GetInfo()
{
DataTable dt = new DataTable("Tbl");
DataSet ds = new DataSet("Set");
OdbcCommand OdbcCmd;
OdbcCmd = new OdbcCommand("select * FROM Products where id = 'JBE-235'", OdbcConn);
OdbcConn.Open();
dt.Load(OdbcCmd.ExecuteReader());
ds.Tables.Add(dt);
OdbcConn.Close();
return ds;
}

但我读到从 WCF 服务返回 DataSet 是一种不好的做法,我有一个桌面应用程序,我需要用服务的数据填充 DataGridView结果。

private void ButtonInfo_Click(object sender, EventArgs e)
{
WCFService service = new WCFService();
DataGridView1.DataSource = service.GetInfo();
service.Close();
}

我应该从 WCF 服务获取哪种数据类型才能正确填充 DataGridView

提前致谢。

最佳答案

更好的方法是返回DTO (在您的情况下,它将是 DTO 的集合)。

首先,创建包含 Products 表中预期字段的 DTO 类。例如:

public class Product
{
public string Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

接下来,通过DataReader 从数据库中读取值:

// use IEnumerable<Product> for .net <= 4.0 and IReadOnlyCollection<Product> for .net >= 4.5
public IReadOnlyCollection<Product> GetInfo()
{
OdbcCommand command = new OdbcCommand("select * FROM Products where id = 'JBE-235'", OdbcConn);
OdbcConn.Open();
var reader = command.ExecuteReader();
var products = new List<Product>();
while (reader.Read())
{
var product = new Product();
// reader index is the column name from query
// You can also use column index, for example reader.GetString(0)
product.Id = (string) reader["id"];
product.Name = (string) reader["name"];
product.Price = (decimal) reader["price"];
products.Add(product);
}
return products;
}

请注意,您需要在读取所有数据后关闭连接,那么好的做法是使用 using 语句在您的方法结束时自动处理它。另一个建议是使用命令 Parameters :

// use IEnumerable<Product> for .net <= 4.0 and IReadOnlyCollection<Product> for .net >= 4.5
public IReadOnlyCollection<Product> GetInfo()
{
using(var con = GetConnection())
{
var cmd = new OdbcCommand("select * FROM Products where id = @Id", con);
cmd.Parameters.AddWithValue("@Id", "JBE-235");
con.Open();
var reader = cmd.ExecuteReader();
var products = new List<Product>();
while (reader.Read())
{
products.Add(new Product { Id = (string) reader["id"], Name = (string) reader["name"], Price = (decimal) reader["price"] });
}
return products;
}
}

关于c# - WCF 服务返回数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com