我使用ORACLE和SQL Server的WCF服务。然后我需要" generic"溶液
我需要构建一个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;
}
答案 0 :(得分:1)
定义操作合同
[OperationContract]
string executeSQL(string sql, bool returnExpected);
将列表转换为json字符串
return Newtonsoft.Json.JsonConvert.SerializeObject(YourResultList);
将json字符串解析为对象
var res = (YourClass)Newtonsoft.Json.JsonConvert.DeserializeObject(s, typeof(YourClass));