【问题标题】:Executing a custom SQL query over WCF通过 WCF 执行自定义 SQL 查询
【发布时间】: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


【解决方案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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多