gpt4 book ai didi

c# - 如何在 C# WCF 中返回 SqlDataReader?

转载 作者:太空狗 更新时间:2023-10-30 00:32:37 26 4
gpt4 key购买 nike

在我的 C# WCF 服务中,我有一个 SqlDataReader,它包含我想返回给客户端的数据行。

如何返回SqlDataReader中的所有内容?

现在我有

if (sqlReader != null)
{
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
return sqlReader[0].ToString();
}
sqlConn.Close();
}
else
{
return null;
}
}

那只返回第一个结果。该类的返回类型目前是字符串。我在想数组中的数组之类的东西,但我不确定怎么做?

编辑:

感谢您的回复。我有兴趣返回服务“创建”的整个 SQL 数据。第一列 ([0]) 不在线 - 这仅用于测试。

但我不确定如何将所有内容从服务返回给客户端。

  • 如何返回?

例如。在 Powershell 中,如果必须在客户端之间传递对象,我会创建一个集合并将对象添加到该集合。

我正在寻找 C# 和 WCF 中的类似内容。

到目前为止非常感谢:)

编辑#2:

明白了! :)

创建了一个新类(例如):

public class ObjectNotification
{
public string AlertDescription;
public string Servername;
}

在我顶部的 svc.cs 文件中:

List<ObjectNotification> objlist = new List<ObjectNotification>();

    if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
ObjectNotification obj = new ObjectNotification();
obj.AlertDescription = sqlReader["AlertDescription"].ToString();
obj.Servername = sqlReader["ComputerName"].ToString();
objlist.Add(obj);
}
}
return objlist;

这正是我想要的:)

最好的问候

最佳答案

您需要定义 DataContract,如果您传递字符串列表或字符串数​​组,您的服务消费者需要知道哪个索引对应哪个列等等。当您将来向服务添加或删除列时,这种方法将变得困难.您可以做的是创建 DataContract,它具有您需要发送的所有属性,并相应地创建操作契约(Contract)。现在,服务消费者可以在将来更新服务引用,以防更改字段时出现编译器错误。这很容易识别。

public List<MyDataContract>  GetData()
{
List<MyDataContract> list = new List<MyDataContract>();
//your code

if (sqlReader != null)
{
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
list.Add(new MyDataContract() {
Id = (int)sqlReader["Id"].ToString(),
Name= sqlReader = sqlReader["Name"].ToString() });

}
sqlConn.Close();
}
}

//finally return list of data

return list;
}

示例数据契约(Contract)

[DataContract]
public class MyDataContract
{
[DataMember]
public int Id{ get; set; }

[DataMember]
public string Name{ get; set; }
}

和运营契约(Contract)

     [OperationContract]
List<MyDataContract> GetData();

in my opinion we need more generic reusable code...

如果您只有 .net 服务消费者,您可以从服务方法返回 DaTaSet 或 DataTable。您需要有 SqlDataAdapter 而不是 sqlReader 并填充数据表或数据集并返回它。您可以在服务方法定义中不更改任何数量的列。您甚至可以使用 DataSet.GetXml()

将返回类型作为字符串发送

DataTable转Json

string json = JsonConvert.SerializeObject(table, Formatting.Indented);

关于c# - 如何在 C# WCF 中返回 SqlDataReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571164/

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