use*_*991 4 c# wcf visual-studio-2010
在我的 C# WCF 服务中,我有一个SqlDataReader包含要返回给客户端的数据行。
如何返回中的所有内容SqlDataReader?
现在我有
if (sqlReader != null)
{
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
return sqlReader[0].ToString();
}
sqlConn.Close();
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
那只返回第一个结果。目前该类的返回类型是字符串。我在想像 array in array 这样的东西,但我不确定如何?
编辑:
感谢您的众多回复。我有兴趣返回服务“创建”的整个 SQL 数据。不在线第一列 ([0]) - 这仅用于测试。
但我不确定如何将服务中的所有内容返回给客户端。
例如。在 Powershell 中,如果我必须在客户端之间传递它,我会创建一个集合并将对象添加到该集合中。
我在 C# 和 WCF 中寻找类似的东西。
到目前为止非常感谢:)
编辑#2:
知道了!:)
创建了一个新类(例如):
public class ObjectNotification
{
public string AlertDescription;
public string Servername;
}
Run Code Online (Sandbox Code Playgroud)
在我的 svc.cs 文件中:
List<ObjectNotification> objlist = new List<ObjectNotification>();
Run Code Online (Sandbox Code Playgroud)
和
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;
Run Code Online (Sandbox Code Playgroud)
这正是我想要的:)
此致
您需要定义 DataContract,如果您传递字符串列表或字符串数组,您的服务使用者需要知道哪个索引对应哪个列等等。当您将来向服务添加或删除列时,这种方法将很难。您可以做的是创建 DataContract,其中包含您需要发送的所有属性并相应地创建操作合同。现在服务消费者可以在未来更新服务引用,以防更改字段,他们将收到编译器错误。这很容易识别。
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;
}
Run Code Online (Sandbox Code Playgroud)
示例数据合同
[DataContract]
public class MyDataContract
{
[DataMember]
public int Id{ get; set; }
[DataMember]
public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和运营合同
[OperationContract]
List<MyDataContract> GetData();
Run Code Online (Sandbox Code Playgroud)
在我看来,我们需要更多通用的可重用代码......
如果您只有 .net 服务消费者,您可以从服务方法返回DataSet 或 DataTable。您需要使用SqlDataAdapter而不是 sqlReader 并填充数据表或数据集并返回它。您可以在服务方法定义中不更改任何数量的列。您甚至可以通过使用将返回类型作为字符串发送DataSet.GetXml()
将数据表转换为 Json
string json = JsonConvert.SerializeObject(table, Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5494 次 |
| 最近记录: |