通过WCF执行自定义SQL查询

时间:2014-10-22 18:47:13

标签: c# sql-server wcf serialization

我使用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;
}

1 个答案:

答案 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));