通过WCF执行自定义SQL查询

我使用ORACLE和SQL Server的WCF服务。 然后我需要“通用”解决方案。

我需要构建一个WCF方法来实质上执行自定义SQL字符串并返回读者结果。

这不是一个很好的做法,可能是最好的避免,它有点打破了WCF服务的重点,但在我的情况下,这需要做。

我不希望WCF数据服务既不能用于其他技术或协议。

只有WCF服务(SOAP)。

关于它的任何好的做法?

也许List<List>返回值需要改进。

SQL Server的源代码。 对于Oracle来说也是如此。

 [OperationContract] List<List> executeSQL(string sql, bool returnExpected); public List<List> executeSQL(string sql, bool returnExpected) { List<List> toReturn = new List<List>(); 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 innerList = new List(); 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; } 

定义运营合同

 [OperationContract] string executeSQL(string sql, bool returnExpected); 

将列表转换为json字符串

 return Newtonsoft.Json.JsonConvert.SerializeObject(YourResultList); 

将json字符串解析为object

 var res = (YourClass)Newtonsoft.Json.JsonConvert.DeserializeObject(s, typeof(YourClass));