【发布时间】:2014-10-22 18:47:13
【问题描述】:
我将 WCF 服务与 ORACLE 和 SQL Server 一起使用。然后我需要“通用”解决方案。
我需要构建一个 WCF 方法来实质上执行自定义 SQL 字符串并返回读取器结果。
这不是一个很好的做法,最好避免这样做,它会破坏 WCF 服务的全部意义,但在我的情况下,必须这样做。
我不想要 WCF 数据服务也不想要其他技术或协议。
仅 WCF 服务 (SOAP)。
有什么好的做法吗?
也许List<List<string>>返回值需要改进。
SQL Server 的源代码。 Oracle 也是如此。
[OperationContract]
List<List<string>> executeSQL(string sql, bool returnExpected);
public List<List<string>> executeSQL(string sql, bool returnExpected)
{
List<List<string>> toReturn = new List<List<string>>();
using (SqlConnection con = new SqlConnection(YourConnectionString))
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = sql;
if (returnExpected == true)
{
using (SqlDataReader sqlReader = cmd.ExecuteReader())
{
if (sqlReader != null)
{
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
List<string> innerList = new List<string>();
for (int i = 0; i < sqlReader.FieldCount; i++)
{
innerList.Add(sqlReader[i].ToString());
}
toReturn.Add(innerList);
}
con.Close();
}
}
}
}
else
{
// We execute without reader
cmd.ExecuteNonQuery();
}
}
return toReturn;
}
【问题讨论】:
-
您可以使用返回值作为字符串,并在返回之前将结果转换为 json
-
使用 Newtonsoft json 转换器库。它非常快。使用列表作为返回值不是好的做法
-
@Slava 你能提供使用 JSON 作为 OperationContract Result 的样本吗?我的客户是 Windows 窗体。
标签: c# sql-server wcf serialization