最近需要做一个程序,用来读取数据库的数据并传递给网页展示,应该是类似于一个后台了吧,只不过不用处理数据。
之前没有接触过这个,所以一开始没有什么头绪,左问问右问问才得到一个思路,那就是用一般处理程序拼接json,然后用context.response传出去,于是新一轮的学习又开始了。
首先是一般处理程序的写法,既然是需要读取数据库,那肯定需要连接数据库,一般处理程序可以写web.config文件,所以连接还是很简便的。然后就是一般处理程序本体了,我写的本体的思路其实很简单,就是读取数据,将读取的数据放到datatable里面,然后再将读取的数据拼接成json格式的字符串,拼好以后一股脑丢出去,下面就贴上代码。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.SessionState; using System.Data.SqlClient; using System.Text; using System.Configuration; using System.Data; namespace test { /// <summary> /// Handler1 的摘要说明 /// </summary> public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //接收前端发来的deviceNo string deviceNo = context.Request.Form["DeviceNo"]; //接收到以后按条件查询数据 string sql = "select * from (表名) where deviceNo = '" + deviceNo + "'"; string sql1 = ConfigurationManager.ConnectionStrings["(数据库名)"].ToString(); SqlConnection conn = new SqlConnection(sql1); try { conn.Open(); } catch { } SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //将读到的数据填充到datatable中 DataTable dt = new DataTable(); sda.Fill(dt); conn.Close(); //以下就是拼接json字符串 StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("["); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]"); //将拼接好的字符串发送出去 context.Response.Write(jsonBuilder.ToString()); } public bool IsReusable { get { return false; } } } }
然后一般处理程序写好以后就是前端网页干活了,网页端就接收一个用户输入的东西,然后传给一般处理程序,再解析一般处理程序返回的json,一一展示到页面上就OK了,因为之前没有怎么接触过javascript,所以这里头疼了好久
$("#search").click(function () { var str = $("#dn").val(); $.ajax({ type: "POST", url: "Handler1.ashx", //datatype: "script", 这个datatype只有在特定的格式才会被用到,比如前端传json到后台,这个datatype后面就加个"json" data: "deviceNo=" + str, error: function () { alert("error"); }, success: function (msg) { //能通信成功的话就会执行下面的语句,但是它是没有检错能力的,所以要自己设定误操作或是各种提示的逻辑 if (msg == "]") { //这里其实就是偷个懒,因为一般处理程序里面没有找到数据的话会返回一个"]",所以我就直接这样判断了 alert("没有找到数据"); } else { var dataObj = JSON.parse(msg); //JSON.parse()的作用是解析json的value,看下面的语句应该就很好理解了 document.getElementById("DeNo").value = dataObj[0].deviceNo; document.getElementById("DeName").value = dataObj[0].deviceName; document.getElementById("CityId").value = dataObj[0].cityId; } } }) })
我这里省略了web.config和html的代码,只贴出了jquery的按钮点击事件,不过重点也就在这个按钮里,缺少的只是HTML的页面代码,因为没有多大的必要贴出来。
如果是萌新请看一看:jquery代码是需要有jquery的库,它本身是一个js文件,以js文件的方式使用,这个文件是需要去网上下载的
我也是萌新,希望路过的大佬能提一提改进的意见,谢谢