使用sqlhelper关于读取多个数据并转换成Json

自己观看 加以改造

原文链接

一、ExecuteNonQuery方法 :执行非查询SQL操作,包括增insert、删delete、改update;ExecuteNonQuery()方法执行SQL语句并且不返回数据。

 public static int ExecuteNonQuery(string strSql, SqlParameter[] parameter)
        {
            SqlConnection sqlConn = new SqlConnection(strConn);
            SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
            if (parameter != null)
            {
                sqlCmd.Parameters.AddRange(parameter);
            }
            sqlConn.Open();
            int objResult = sqlCmd.ExecuteNonQuery();
            sqlConn.Close();
            return objResult;
        }

二、ExecuteDataset会运行你的基本SELECT(选择)查询并生成一个DaclosetaSet,然后就能够被绑定到服务器对象上,或者被用来创建DataView(数据视图)。

public static DataSet ExecuteDataSet(string strSql, SqlParameter[] parameter)
        {
            SqlConnection sqlConn = new SqlConnection(strConn);
            SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
            SqlDataAdapter sqlAdp = new SqlDataAdapter(sqlCmd);
            
            DataSet ds = new DataSet();
            sqlAdp.Fill(ds);
            return ds;
        }
<span style="font-size:12px;"></span>

三、ExecuteReader主要是用于查询语句(SELECT),它是为了提高运行性能而设置的。SqlDataReaders很类似于经典 ADO里的只能向前的只读记录集(即类似ASP中的movenext),它们对于填充ListBoxe控件和CheckBoxList控件很有用处。对ExecuteReader的调用看起来就像是一个ExecuteDataset。要记住,它需要命名空间为System.Data.SqlClient:

所以以后如果SQL语句中,只要是查找单条的数据中的某个字段或全部字段时,如select top 1 * from XX where id=xx;用DataSet (即ExecuteDataSet ),但是如果说满足id=xx的结果有很多个数据,此时用ExecuteReader,因为它能够查询出“只读的向前的数据流”(如ASP中的movenext 一样,明白了吧,哈哈),如果此时用ExecuteDataSet就错了,更何况ExecuteReader读取数据的效率会比ExecuteDataSet高。

 		public static SqlDataReader ExecuteReader(string strSql, CommandType commandType = CommandType.Text)
        {
            SqlConnection myConn = new SqlConnection(strSqlConnection);
            SqlCommand SqlCmd = new SqlCommand(strSql, myConn);
            SqlCmd.CommandType = commandType;
            SqlDataReader sdr = null;
            try
            {
                myConn.Open();
                sdr = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
 
            }
            return sdr;
 
        }

四、对于使用ExecuteScalar(),ExecuteScalar()方法执行SQl查询,并返回查询结果集中的第一行的第一列,忽略额外的列或行!虽然返回的值的数据类型可以是string,int。。。但msdn.com微软上说:

使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。所以我习惯在count(字段)才用ExecuteScalar,如:

	public int SelClass(decimal id) //添加类别
        {
            string commText = string.Format("select Count(id) as [Count] from FAQ_List where ClassID like '{0}%'", id);
            return Convert.ToInt32(db.ExecuteScalar(CommandType.Text, commText));
        }

 

 	public static object ExecuteScalar(string strSql, CommandType commandType = CommandType.Text)
        {
            SqlConnection myConn = new SqlConnection(strSqlConnection);
            SqlCommand SqlCmd = new SqlCommand(strSql, myConn);
            SqlCmd.CommandType = commandType;
            object objResult = null;
            try 
            {
                myConn.Open();
                objResult=SqlCmd.ExecuteScalar();
            }
            catch(Exception ex)
            {
 
            }
            finally
            {
                myConn.Close();
            }
            return objResult;

五、DataTable 与dataset十分相似;可以把DataTable和DataSet看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?

原因是,这种容器的功能比较强大,除了可以存数据,还可以有更大用途。举例:在一个c/s结构的桌面数据库系统里,你可以把前面存放查询结果的容器里的数据显示到你客户端界面上,用户在界面上对数据进行添加、删除、修改,你可以把用户的操作更新到容器,等用户操作完毕了,要求更新,然后你才把容器整个的数据变化更新到中心数据库,这样做的好处是什么?就是减少了数据库操作,客户端速度提高了,数据库压力减小了。
DataSet可以比作一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里可以存储多个DataTable

public DataTable reDt(string cmdstr)  //执行sql查询
    {
        SqlConnection con =GetCon();
        SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return (ds.Tables[0]);
    }

原文链接

然后使用sqlhelper来读取数据库,并转入到DataTable中

	//先使用一个dataset 并存储到dataset中
	DataSet ds = new DataSet();
	ds = SqlHelper.ExecuteDataset(sqlConString, CommandType.Text, selectSr, sqlPara);
	//然后读取第一个表即可
	dt = ds.Tables[0];

Json转化

网上有很多简单的转化格式,这里我们当然继续我们的从数据库的转化。前一步我们将数据存储到了DataTable中,后面我们也要转化成json格式。经过一下午的折腾弄好了,并整理成方法:


     //json格式转换
    private string ToJson(DataTable dt)
    {
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
		
        javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
        ArrayList arrayList = new ArrayList();
        foreach (DataRow dataRow in dt.Rows)
        {
            Dictionary<string, object> dictionary = new Dictionary<string, object>();  //实例化一个参数集合
            foreach (DataColumn dataColumn in dt.Columns)
            {
                dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToString());
            }
            arrayList.Add(dictionary); //ArrayList集合中添加键值
        }

        return javaScriptSerializer.Serialize(arrayList) ; 
    }

然后我们直接返回到前端:

  		string json = ToJson(dt);
        context.Response.Write(json);

Chrome浏览器查看
从这里我们可以看到这是比较标准的json数组格式,因此我们可以直接对其进行遍历:

	for (var i in data) {
		alert(data[i].sceneorindustry+"Gid"+data[i].Gid);
	}

如果不是标准的json,我们要先将其转化:
var result={“datas”:[{“flag”:1,“macId”:“2”,“mbId”:0,“userName”:“XXX”},{“flag”:1,“macId”:“1”,“mbId”:1,“userName”:“YYY”}]};
进行遍历之前得先解析出标准的json数组格式即[{},{}]

var data= result.datas;

 for (var i = 0; i < data.length; i++) {
        //data[i]表示获得第i个json对象即JSONObject
        //data[i]通过.字段名称即可获得指定字段的值
        data[i].userName;
    }
 for(var i in data){
        //表示遍历数组,而i表示的是数组的下标值,
        //data[i]表示获得第i个json对象即JSONObject
        //data[i]通过.字段名称即可获得指定字段的值
        data[i].userName;
    }

注意:在前端解析后端传过来的字符串有两种方法:

  1. eval()
  2. JSON.parse(), jquery的底层 $.parseJSON()用的还是JSON.parse();

前端拼接字符串:

 	  var  params = [];  
      for(var i = 0; i < 3; i++){  
        var param = [];  
        param.push("one");  
        param.push("two");  
        param.push("three");  
        params.push({"group":i,"param":param});  
      }  
      
    var json = JSON.stringify(params);  
    alert(json);  
      
    var jsonElem = document.getElementById("json");  
    jsonElem.innerHTML = json;  
	组成的json串:  
[{"group":0,"param":["one","two","three"]},{"group":1,"param":["one","two","three"]},{"group":2,"param":["one","two","three"]}]  

原文链接
在后台的json编写可以参考:C#后台编写json

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值