通过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));