数据更新与保存
tcsj.aspx页面中保存按钮代码如下:(方便用户下一次进行编辑,我这里设置了一个只更新部分数据的功能,其中的参数qk=0用来识别只是更新的操作,而不是全部完成数据后的保存)
ajax('NewUptcsj.ashx?qk=0&bj=' + tolj, 'POST', JSON.stringify({ data: hot.getData() }), function (res) {
var response = res.response;
if (response == 'ok') {
obj1.setAttribute("class", "");
exampleConsole.innerText = "成功保存";
}
else {
obj1.setAttribute("class", "");
exampleConsole.innerText = '保存失败';
}
setTimeout(function () { exampleConsole.innerText = ""; }, 4000);
});
如果用户对该班所有学生数据都填报完成后,那么我在这里用qk=1来标识,大家在实际项目中可不必这样,目前我只想到这个笨方法去解决只完成了一部分数据就上传到数据库中的办法,欢迎高手们给提出改进的办法来
NewUptcsj.ashx完整代码如下:
<%@ WebHandler Language="C#" Class="NewUptcsj" %>
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json.Linq;
public class NewUptcsj : IHttpHandler {
private static DataTable tblDatas;
private static string xbtype,bc,qk;
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/Json";
bc = context.Request.QueryString["bj"].ToString().Trim();
qk = context.Request.QueryString["qk"].ToString().Trim();
string username = context.Request.Form[0];
var mJObj = JObject.Parse(username);
var mName = (JArray)mJObj["data"];
xbtype = mName[0][2].ToString();
int zk = 0;
for (int n = 0; n < mName.Count; n++)
{
for(int m=0;m<16;m++)
{
if( mName[n][m].ToString()=="")
{
zk+=1;
}
}
}
if(qk=="1"&&zk!=0)
{
context.Response.Write("no");
}
else
{
//建立数据表存储数据;
tblDatas = new DataTable();
DataColumn dc = null;
dc = tblDatas.Columns.Add("bc", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("xb", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("xjh", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("sg", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("tz", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("fhl", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("wsm", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("ldty", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("zwtqq", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("ybm", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("yy", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("zysl", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("yysl", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("zyqg", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("yyqg", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("zyquan", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("yyquan", Type.GetType("System.String"));
for (int i = 0; i < mName.Count; i++)
{
DataRow newRow;
newRow = tblDatas.NewRow();
newRow["bc"] = bc;
newRow["xb"] = xbtype;
newRow["xjh"] = mName[i][1].ToString();
newRow["sg"] = mName[i][3].ToString().Length !=0 ? mName[i][3].ToString():null;
newRow["tz"] = mName[i][4].ToString() .Length !=0 ? mName[i][4].ToString():null;
newRow["fhl"] = mName[i][5].ToString().Length !=0 ?mName[i][5].ToString():null;
newRow["wsm"] = mName[i][6].ToString().Length !=0?mName[i][6].ToString():null;
newRow["ldty"] = mName[i][7].ToString().Length !=0 ? mName[i][7].ToString():null;
newRow["zwtqq"] = mName[i][8].ToString().Length !=0 ?mName[i][8].ToString():null;
newRow["ybm"] =mName[i][9].ToString().Length !=0 ?mName[i][9].ToString():null;
newRow["yy"] = mName[i][10].ToString().Length !=0 ? mName[i][10].ToString():null;
newRow["zysl"] =mName[i][11].ToString().Length !=0 ? mName[i][11].ToString():null;
newRow["yysl"] =mName[i][12].ToString().Length !=0 ?mName[i][12].ToString():null;
newRow["zyqg"] = mName[i][13].ToString().Length !=0 ?mName[i][13].ToString():null;
newRow["yyqg"] = mName[i][14].ToString().Length !=0 ?mName[i][14].ToString():null;
newRow["zyquan"] = mName[i][15].ToString().Length !=0 ?mName[i][15].ToString():null;
newRow["yyquan"] = mName[i][16].ToString() .Length !=0 ?mName[i][16].ToString():null;
tblDatas.Rows.Add(newRow);
}
try
{
BatchInsertBySqlBulkCopy(tblDatas,"tcsj_0");
SqlParameter[] p = new SqlParameter[2];
p[0] = new SqlParameter("@bc", SqlDbType.NChar, 10);
p[0].Value = bc;
p[1] = new SqlParameter("@xb", SqlDbType.Int);
p[1].Value =Convert.ToInt32(xbtype);
Sqldo.ExecuteNonQuery(Sqldo.CONN_STR, CommandType.StoredProcedure, "UPtcsj_1",p);
context.Response.Write("ok");
return;
}
catch (Exception e)
{
context.Response.Write(e);
}
}
}
public bool IsReusable {
get {
return false;
}
}
/// <summary>
/// 批量插入SqlBulkCopy
/// </summary>
/// <param name="dt"></param>
/// <param name="tableName">表名</param>
public static void BatchInsertBySqlBulkCopy(DataTable dt, string tableName)
{
using (SqlBulkCopy sbc = new SqlBulkCopy(Sqldo.CONN_STR))
{
sbc.BatchSize = dt.Rows.Count;
sbc.BulkCopyTimeout = 10;
sbc.DestinationTableName = tableName;
for (int i = 0; i < dt.Columns.Count; i++)
{
sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, i);
}
//全部写入数据库
sbc.WriteToServer(dt);
}
}
}
最后,附上这个项目的源代码,欢迎各位同仁交流,如有什么问题,可以留言,我会及时回复大家的疑问
完整源码下载