- string filename = FileUpload1.PostedFile.FileName;
- string fileurl = filename.Substring(filename.LastIndexOf("\") + 1);
- int i = filename.LastIndexOf(".");
- string newext = filename.Substring(i);
- string path = Server.MapPath("file");
- if (newext != ".xls")
- {
- Alert.Show("文件格式不正确!");
- }
- else
- {
- path = path + "\" + fileurl;
- FileUpload1.PostedFile.SaveAs(path);
- string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0;";
- OleDbConnection cnnxls = new OleDbConnection(mystring);
- OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
- DataSet myDs = new DataSet();
- myDa.Fill(myDs);
- if (myDs.Tables[0].Rows.Count > 0)
- {
- string strSql = "";
- conn.Open();
- SqlCommand myCmd = null;
- int kk = 0, nn = 0;
- for (int k = 0; k < myDs.Tables[0].Rows.Count; k++)
- {
- if (CheckUserNumberIsExist(myDs.Tables[0].Rows[k]["工号"].ToString()))
- {
- if (CheckUserNnameIsExist(myDs.Tables[0].Rows[k]["姓名"].ToString()))
- {
- strSql = "insert into OT_user_table (u_Labor_number,u_password,u_name,u_team,u_type,u_c_id,u_jn,u_zg,u_qy,u_yewuy,u_zx_id,u_work,u_phone)";
- strSql += " values('" + myDs.Tables[0].Rows[k]["工号"].ToString() + "','" + myDs.Tables[0].Rows[k]["密码"].ToString() + "','" + myDs.Tables[0].Rows[k]["姓名"].ToString() + "','" + myDs.Tables[0].Rows[k]["组别"].ToString() + "',";
- strSql += "'" + myDs.Tables[0].Rows[k]["角色"].ToString() + "','" + SelectId(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','" + myDs.Tables[0].Rows[k]["技能"].ToString() + "','2',";
- strSql += "'" + Select_Qy(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','1','" + SelectTeam_Id(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','" + myDs.Tables[0].Rows[k]["是否在职"].ToString() + "','" + myDs.Tables[0].Rows[k]["联系电话"].ToString() + "')";
- try
- {
- myCmd = new SqlCommand(strSql, conn);
- myCmd.ExecuteNonQuery();
- kk++;
- }
- catch
- {
- nn = kk + 1;
- Alert.Show("第" + nn.ToString() + "行数据导入失败.");
- }
- }
- else
- {
- nn = kk + 1;
- Alert.Show("第" + nn.ToString() + "行数据姓名" + myDs.Tables[0].Rows[k]["姓名"].ToString() + "已存在,操作停止!");
- return;
- }
- }
- else
- {
- nn = kk + 1;
- Alert.Show("第" + nn.ToString() + "行数据工号" + myDs.Tables[0].Rows[k]["工号"].ToString() + "已存在,操作停止!");
- return;
- }
- }
- Alert.Show("已成功插入" + kk.ToString() + "条数据");
- conn.Close();
- File.Delete(path);
- // 2. 关闭本窗体,然后刷新父窗体
- PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
- }
- }
复制代码 代码如上,最后提示如下:- Ext.Ajax.request({
- form: theForm.id,
- url: url,
- isUpload: X.form_upload_file,
- //params: serializeForm(theForm) + '&X_AJAX=true',
- success: function (data) {
- // see: http://extjs.com/forum/showthread.php?t=8129
- // 如果页面中有FileUpload,responseObj.responseText会包含于 <pre>标签。
- var scripts = data.responseText;
- if (scripts) {
- // 已经经过encodeURIComponent编码了,在ResponseFilter中的Close函数中
- var prefix = scripts.substr(0, 4);
- if (prefix.toLowerCase() === '<pre') {
- //scripts = scripts.substr(5, scripts.length - 11);
- //scripts = decodeURIComponent(scripts.replace(/<\/?pre>/ig, ''));
- scripts = scripts.replace(/<\/?pre[^>]*>/ig, '');
- scripts = decodeURIComponent(scripts);
- }
- //eval(scripts);
- new Function(scripts)(); //提示语法错误
- }
- X.ajaxReady();
- },
复制代码
查过网上的一些解释,某些只在IE6的时候上传错误,我这个是用IE8的。网上有解决方法,但我还不知道是否是这个错误。
附网上搜索到的情况:
- ExtAspNet IE6 上传出错的解决方案
- 修改 Business/ResourceManager/ResponseFilter.cs
- 将 Close()方法中的
- // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
- if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
- {
- // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
- responseText = HttpUtility.UrlEncode(responseText);
- responseText = responseText.Replace("+", "%20");
- }
- 修改为
- // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
- if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
- {
- // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
- responseText = HttpUtility.UrlEncode(responseText);
- responseText = responseText.Replace("+", "%20");
- responseText = "<pre>" + responseText + "</pre>";
- }
- 其中红色代码行为新添加的。
- 在IE6上出错的原因是,上传事件触发后,页面会接收返回结果,,ResourceManager在执行Page_PreRenderComplete的时候HttpContext.Current.Response.ContentType = "text/plain";这句将返回内容解析为源代码并由X.ajax.js中的new Function(scripts)();解析成JS代码,而在IE6上,返回结果会因为格式错误而出错,导致new Function(scripts)();时出错。
- 该解决方案应该算是一种技巧的解决方式,因为有上传控件时,本身Ext就会在返回结果中添加<pre>标记,程序在执行过程中会删除此标记。在修改上坚持尽量少的更改。
- 以上解决方案已在实际项目中验证通过,没有ie6的童鞋可以安装IETester进行调试。
复制代码
请sanshi看看,谢谢!
|