从关系数据库中获取json数据的更好方法?

时间:2018-09-17 22:17:22

标签: c# json sql-server wcf serialization

我不知道我的头衔是可以理解的,但实际上我想知道哪个更好?

1-创建对象类并通过循环从mssql数据库获取数据

2-以json格式从sql数据库获取数据

3-别的..

我认为,处理大数据时循环可能很慢。但是,也许使用 json路径比循环慢。

示例1(在循环中创建对象

List<objExample > retVal = new List<objExample >();
objExample item;
SqlConnection con = new SqlConnection("CONNECTION STRING");
SqlDataAdapter da;
SqlCommandcmd;
da = new SqlDataAdapter("Select a,b from table", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
foreach (DataRow itemdr in dt.Rows)
{
item = new objExample();
item.A= itemdr["a"].ToString();
item.B= itemdr["b"].ToString();
item.HasError = false;
retVal.Add(item);
}
return retVal;

示例2( FOR JSON PATH

List<objExample > retVal;
SqlConnection con = new SqlConnection("CONNECTION STRING");
SqlDataAdapter da;
SqlCommandcmd;
da = new SqlDataAdapter("Select a,b from table for json path", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
string _json = dt.Rows[0][0].ToString();
retVal = JsonConvert.DeserializeObject<List<objExample>>(_json);
return retVal;

我都用小数据尝试了这两个方法,但是我不满意。

PS:我在脑海中写了代码。对不起,错误的代码和不正确的英语。

请指导我。谢谢。

2 个答案:

答案 0 :(得分:0)

请澄清一下,您在阅读完整的表格吗?

如果目标是获取存储在json中的数据,并可能对其执行一些查询,那么NoSQL DB似乎比SQL更为合适。

答案 1 :(得分:0)

计算取决于行数的命令数。有点像我们如何处理“大O”复杂性。 我会做类似的事情:

  using (var sqlCommand = new SqlCommand("Select a,b from table for json path", con))
{
   try
     {
       using (var reader = sqlCommand.ExecuteReader())
        {
           while (reader.Read())
           {
             item = new objExample();
             item.A= reader["a"].ToString();
             item.B= reader["b"].ToString();
             item.HasError = false;
             retVal.Add(item);

            }
           }

      }

}

请记住,执行此操作时sql连接将保持打开状态,因此如果要在循环之后或在循环中执行此操作,则它将进行判断。 并且da.Fill或使用上面的方法在内部是相同的,仍然要遍历所有行。 就使用json而言,除非您问是否将Json文件存储比在sql中存储更好,否则我不会这么做。那是一个完整的差异问题。

一旦您将其包含在列表中,就可以使用PLINQ并行处理数据,即使您进行上述反序列化,也可以尝试使用PLINQ。