汉邦问答 / 问答 / 问答详情

JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍

2023-08-05 17:10:37
TAG: 函数 cookie
CarieVinne

cookie是网站设计者放置在客户端(浏览器)的小文本文件,cookie不仅能够实现保存密码功能,还可以通过cookie保存最近浏览记录增加用户体验。

在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下:

HttpServletRequest request

HttpServletResponse response

Cookie username = new Cookie("username ","cookievalue");

Cookie password = new Cookie("password ","cookievalue");

response.addCookie(username );

response.addCookie(password );但是为安全起见,我们在后台获取的密码大多是在js中通过MD5加密后的密文,如果将密文放到cookie中,在js中获取到也没有作用;

然后考虑在js中存取cookie,代码如下:

//设置cookie

var passKey = "4c05c54d952b11e691d76c0b843ea7f9";

function setCookie(cname, cvalue, exdays) {

var d = new Date();

d.setTime(d.getTime() + (exdays*24*60*60*1000));

var expires = "expires="+d.toUTCString();

document.cookie = cname + "=" + encrypt(escape(cvalue), passKey) + "; " + expires;

}

//获取cookie

function getCookie(cname) {

var name = cname + "=";

var ca = document.cookie.split(";");

for(var i=0; i<ca.length; i++) {

var c = ca[i];

while (c.charAt(0)==" ") c = c.substring(1);

if (c.indexOf(name) != -1){

var cnameValue = unescape(c.substring(name.length, c.length));

return decrypt(cnameValue, passKey);

}

}

return "";

}

//清除cookie

function clearCookie(cname) {

setCookie(cname, "", -1);

}

setCookie(cname, cvalue, exdays)三个参数分别是存放的cookie名字、cookie值、cookie有效天数由于cookie中不能包含等号、空格、分号等特殊字符,我在设置cookie时使用escape() 函数对字符串进行编码,获取cookie时使用unescape()函数解码。但是escape()函数不会对 ASCII 字母和数字进行编码,所以存放到cookie中的账号、密码是以明文存放的,不安全。于是上网找了一个对字符串加密解密算法,该算法需要传两个参数,一个需要加密的字符串,一个自定义加密密钥passKey。设置cookie时使用encrypt(value, passkey)加密,读取cookie时使用decrypt(value, passKey)解密,该算法附在本文最后。

存取cookie方法的调用:

1、定义checkbox

<input type="checkbox" id="rememberMe" checked="checked"/>记住密码2、判断帐号密码输入无误后调用

if($("#rememberMe").is(":checked")){

setCookie("customername", $("#username").val().trim(), 7)

setCookie("customerpass", $("#password").val().trim(), 7)

}3、进入登录界面后,判断cookie中是否有帐号密码,如果有就自动填充

$(function(){

//获取cookie

var cusername = getCookie("customername");

var cpassword = getCookie("customerpass");

if(cusername != "" && cpassword != ""){

$("#username").val(cusername);

$("#password").val(cpassword);

}

}最后附上字符串加密解密算法

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!"".replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return"\w+"};c=1};while(c--)if(k[c])p=p.replace(new RegExp("\b"+e(c)+"\b","g"),k[c]);return p}("A G(a,b){x(b==v||b.7<=0){D.y("z R P O");t v}6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.M(b.7/2);6 g=m.B(2,C)-1;x(e<2){D.y("L K J z");t v}6 h=m.F(m.H()*N)%I;c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i++){j=l(a.u(i)^m.r((c/g)*E));x(j<p){k+="0"+j.n(p)}Q k+=j.n(p);c=(e*c+f)%g}h=h.n(p);w(h.7<8)h="0"+h;k+=h;t k}A S(a,b){6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.F(b.7/2);6 g=m.B(2,C)-1;6 h=l(a.o(a.7-8,a.7),p);a=a.o(0,a.7-8);c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i+=2){j=l(l(a.o(i,i+2),p)^m.r((c/g)*E));k+=T.U(j);c=(e*c+f)%g}t k}",57,57,"||||||var|length||charAt||||||||||||parseInt|Math|toString|substring|16|10|floor|for|return|charCodeAt|null|while|if|log|key|function|pow|31|console|255|round|encrypt|random|100000000|the|change|plesae|ceil|1000000000|empty|be|else|cannot|decrypt|String|fromCharCode".split("|"),0,{}))PS:下面看下js操作cookie的相关函数

//设置cookie函数,三个参数,一个是cookie的名子,一个是值,一个是设置cookie保存时间,单位:天

function SetCookie(name,value,days){

var days=arguments[2]?arguments[2]:30; //此 cookie 将被保存 30 天

var exp=new Date(); //new Date("December 31, 9998");

exp.setTime(exp.getTime() + days*86400000);

document.cookie=name + "="+ escape (value) + ";expires=" + exp.toGMTString();

}

//取cookies函数

function getCookie(name){

var arr=document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));

if(arr!=null){

return unescape(arr[2]);

}

return null;

}

//删除cookie函数

function delCookie(name){

var exp = new Date();

exp.setTime(exp.getTime() - 1);

var cval=getCookie(name);

if(cval!=null){

document.cookie= name + "="+cval+";expires="+exp.toGMTString();

}

}

customer name是什么意思

customer name 英[u02c8ku028cstu0259mu0259 neim] 美[u02c8ku028cstu0259mu025a nem] [词典] [计] 用户姓名; [例句]The third example shows how to find a customer name and how to delete it.第三个例子展示了如何查找某一客户名和如何删除它。
2023-08-04 12:01:131

cust_name什么意思

自定义的变量名吧,Customer Name的缩写.
2023-08-04 12:01:212

customer name 简写什么?

C/N
2023-08-04 12:01:281

根据销售订单找到对应的customer name。怎么用sap的table找出。

订单合作伙伴表VBPA客户名表kna1select * from VBPA into *** it_vbpawhere vbeln = "10001"and parvw = "WE".if sy-subrc <> 0.select * from kna1 into ***for all entry in it_vbpawhere kunnr = it_vbpa-kunnr.endif.
2023-08-04 12:01:382

需求说明 java-实现添加客户信息 客户信息包括:姓名、年龄、是否有会员卡

这个太简单了,自己摸索一下
2023-08-04 12:01:471

创建一个Customer类,类中的属性有姓名(name),年龄(age),性别(gender)每个属性分别有get/set方法。

public class Customer {private String name;private String age;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}}
2023-08-04 12:02:041

如何使用SQL合并两张无关联表的两个字段

SELECT TOP 10 CostCenterName,ROW_NUMBER() OVER(ORDER BY CostCenterName) AS qwe INTO #TB1 FROM CostCenterSELECT TOP 10 CustomerName,ROW_NUMBER() OVER(ORDER BY CustomerName) AS qwe INTO #TB2 FROM CustomerSELECT A.CostCenterName,B.CustomerName FROM #TB1 AINNER JOIN #TB2 BON A.qwe=B.qweDROP TABLE #TB1DROP TABLE #TB2
2023-08-04 12:02:161

求SQL语句

2023-08-04 12:02:241

怎么用sql命令语句写check约束

altertable[Users]addconstraint[CK_Users_Balance]check(Balance>0)一个例子...
2023-08-04 12:02:454

求帮忙做一个银行数据库 Oracle

功能一:create database bank;功能二:create table userinfo(customerID number(10) not null,customerName varchar2(10) not null,PID char(18) not null,telephone char(11) not null,address varchar2(255) not null);create table cardinfo(cardID varchar2(19) not null,cardCustomerID number(10) not null,curtype char(3) not null,savingtype char(4) not null,openDate date not null,openmoney number(10,2) not null,blance number(10,2) not null,password char(6) not null,isreportLoss char(2) not null);create table transinfo(id number(15) not null,transcustomerID number(10) not null,transcardID varchar2(19) not null,transdate date not null,transmoney number(10,2) not null,transtype char(4) not null,remark varchar2(255) not null);功能三:alter table userinfo add constraint pk_userinfo primary key (customerID);alter table userinfo add constraint ck_PID check(length(PID)=18);alter table cardinfo add constraint pk_cardinfo primary key (cardID);alter table cardinfo add constraint fk_CustomerID_card foreign key cardCustomerID references userinfo(customerID);alter table transinfo add constraint pk_transinfo primary key (id);alter table transinfo add constraint fk_CustomerID_trans foreign key cardCustomerID references userinfo(customerID);alter table transinfo add constraint fk_transcardID_trans foreign key cardCustomerID references cardinfo(cardID);功能四:insert into userinfo values(1,"张三","123456789012345671","13012345671","地址1");insert into userinfo values(2,"李四","123456789012345672","13012345672","地址2");insert into userinfo values(3,"王五","123456789012345673","13012345673","地址3");insert into cardinfo values("1234567890123456789",1,"RMB","活期",sysdate,5.04,5.04,"123456","否");insert into cardinfo values("1234567890123456788",2,"JPY","活期",sysdate,3.22,3.22,"123457","否");insert into cardinfo values("1234567890123456787",3,"USA","定期",sysdate,6.78,6.78,"123458","否");insert into transinfo values(1,1,"1234567890123456789",sysdate,0.23,"存入","存钱");insert into transinfo values(2,2,"1234567890123456788",sysdate,1.27,"支取","取钱");insert into transinfo values(3,3,"1234567890123456787",sysdate,2.34,"存入","存钱");功能五:select transcardID,transmoney from transinfo where to_char(transdate,"mm")=to_char(sysdate,"mm") and transmoney=max(transmoney);功能六:create procedure p_ciscursor cr isselect b.cardID,a.customerName,a.telephone from userinfo a,cardinfo b where a.customerID=b.cardCustomerID and to_char(sysdate,"dd") in ("28","29","30","31") and b.blance<200;cur_info cr;beginfor cur_info in cr loopdbms_output.put_line("卡号:" || cur_info.cardID || "&&" || "姓名:" || cur_info.customerName || "电话:" || cur_info.telephone);end loop;end p_c;
2023-08-04 12:03:031

求翻译,请英语达人帮手

Customer flow of funds Name Customer Code Capital account Customer Name Date Flow serial number Shareholders code Type of business Transaction price Quantity traded Securities balances Transaction amount Fund balance Securities Code Securities Name Fund dividends credited Bank of the securities Interest owned by the Withholding tax on interest Fund dividends credited Withholding tax on interest Harvest Theme Power demand Industrial Trend Customer assets Name of funds CURRENCY Funds Securities assets Open the Fund"s assets Non-exchange bond assets
2023-08-04 12:03:114

编程Customer.java:编写Customer类

class Customer{int custid;char custgender ;char custname;Customer(char id,char name,char gender){ this.custname = name; this.custid = id; this.custgender = gender;}int getcustid(){return custid;}char getcustgender(){return custgender;}char getname(){return custname;}void setcustname(char s){custname=s;}void setcustgender(char g){custgender=g;}void setcustid(int h){ custid=h;}void printMSG(){ System.out.println("客户身份证号:"+custid+"客户性别:"+custgender+"客户姓名:"+custname); }}
2023-08-04 12:03:203

关于SQL查询指定行

加TOP 1即可"select TOP 1 customername from Cumulation where point>="" & Textpoint.Text & """
2023-08-04 12:03:362

javascript验证数字

要验证数字用isNaN就可以了
2023-08-04 12:03:442

如何用JavaScriptSerializer

JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。您无法访问序列化程序的此实例。但是,此类公开了公共 API。因此,当您希望在托管代码中使用 JavaScript 对象符号 (JSON) 时可以使用此类。若要序列化对象,请使用 Serialize 方法。若要反序列化 JSON 字符串,请使用 Deserialize 或 DeserializeObject 方法。若要序列化和反序列化 JavaScriptSerializer 本身不支持的类型,请使用 JavaScriptConverter 类来实现自定义转换器。然后,使用 RegisterConverters 方法注册转换器。托管类型和 JSON 之间的映射下表显示序列化进程中托管类型和 JSON 之间的映射。JavaScriptSerializer 本身支持这些托管类型。将 JSON 字符串反序列化为托管类型时,采用相同的映射。但是,反序列化可能是非对称的,并非所有可序列化的托管类型都可以从 JSON 反序列化得到。二、通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization如果要使用它,还须添加System.Web.Extensions库文件引用参考实体类:Customerpublic class Customer{public int Unid { get; set; }public string CustomerName { get; set; }}类JavaScriptSerializer描述:为启用 AFAX 的应用程序提供序列化和反序列化功能。(一) 序列化方法:public string Serialize(Object obj),用于将对象转换为 JSON 字符串public string ScriptSerialize(Customer customer){JavaScriptSerializer js = new JavaScriptSerializer();return js.Serialize(customer);}测试:Customer cc = new Customer { Unid = 1, CustomerName = "John" };string strJson = ScriptSerialize(cc);Console.WriteLine(strJson);(二)反序列化public Customer ScriptDeserialize(string strJson){JavaScriptSerializer js = new JavaScriptSerializer();return js.Deserialize<Customer>(strJson);}通过Deserialize<T>方法来实现。测试:Customer c1 = ScriptDeserialize(strJson);Console.WriteLine(c1.Unid + " " + c1.Custome
2023-08-04 12:03:511

数据库问题~SQL 服务器: 消息 8120

使用了 GROUP BY 的话 就必须要保证select 后面的列名 是包含在聚合函数中的 例如 sum() average() 这样的函数 或者是最后 group by 后面的 你想实现什么查询 你group by sex 最后一男 一女 就两条数据
2023-08-04 12:04:011

--建立客户基本信息表 CREATE TABLE [dbo].[Customer] ( [cust

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????为什么?为什么?为什么现在答很多道题也不给钱?
2023-08-04 12:04:082

数据库,不是第二范式可以是第三范式吗?

第一范式:第一范式要求每列必需是最小的原子单元,即不能再分。第二范式:第二范式要求每列必需和主键相关,不相关的列放入别的表中,即要求一个表只描述一件事情。第三范式:第三范式要求表中各列必需和主键直接相关,不能间接相关,浏览每个表,都满足第三范式要求。
2023-08-04 12:04:298

什么是数据库的第一范式,第二范式和第三范式

范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。 ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 考虑这样一个表:【联系人】(姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。 可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。 ◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。 ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 考虑这样一个表:【联系人】(姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。 可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。 ◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。
2023-08-04 12:04:441

数据库第二范式和第三范式的区别

满足第一范式 就是每个属性都不可在拆分满足第二范式,非属性值要完全依赖主编码 非码属性不相互依赖满足第三范式,不存在传递依赖
2023-08-04 12:04:532

如何用post的方式请求一个action

方法1:根据【成功控件】定义,我们设置按钮的name,在服务端用name来区分哪个按钮的提交:HTML代码<form action="Handler1.ashx" method="post"><p>客户名称: <input type="text" name="CustomerName" style="width: 300px" /></p><p>客户电话: <input type="text" name="CustomerTel" style="width: 300px" /></p><p><input type="submit" name="btnSave" value="保存" /><input type="submit" name="btnQuery" value="查询" /></p></form>服务端处理代码// 注意:我们只要判断指定的name是否存在就可以了。if( string.IsNullOrEmpty(context.Request.Form["btnSave"]) == false ) {// 保存的处理逻辑}if( string.IsNullOrEmpty(context.Request.Form["btnQuery"]) == false ) {// 查询的处理逻辑}方法2:我将二个按钮的name设置为相同的值(根据前面的成功控件规则,只有被点击的按钮才会提交),在服务端判断value,示例代码如下:<form action="Handler1.ashx" method="post"><p>客户名称: <input type="text" name="CustomerName" style="width: 300px" /></p><p>客户电话: <input type="text" name="CustomerTel" style="width: 300px" /></p><p><input type="submit" name="submit" value="保存" /><input type="submit" name="submit" value="查询" /></p></form>string action = context.Request.Form["submit"];if( action == "保存" ) {// 保存的处理逻辑}if( action == "查询" ) {// 查询的处理逻辑}当然了,解决这个问题的方法很多,我们还可以在提交前修改form.action属性。 对于MVC来说,可能有些人会选择使用Filter的方式来处理。最终选择哪种方法,可根据各自喜好来选择。
2023-08-04 12:05:011

java程序改错:用java编写一个查找客户的系统

具体?
2023-08-04 12:05:092

sqlserver同一数据库中A,B两表。使用触发器实现两表双向的数据同步添加

这个错误很明显就是SET IDENTITY_INSERT TB_Customer ON 你这条语句在a触发器中已经开启而b触发器也开启了 此时a触发器还没有关闭IDENTITY_INSERT另外一个又打开 肯定会报错了 不为什么要插入标识列? 设为自动增长 就不需要这个命令了 你的触发器就可以同时执行
2023-08-04 12:05:181

Hibernate使用中防止SQL注入的几种方案

Hibernate使用中防止SQL注入的几种方案Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免SQL注入: 1.对参数名称进行绑定:12Query query=session.createQuery(hql);query.setString(“name”,name); 2.对参数位置进行邦定:1234Query query=session.createQuery(hql);query.setString(0,name1);query.setString(1,name2);... 3.setParameter()方法:12Query query=session.createQuery(hql); query.setParameter(“name”,name,Hibernate.STRING); 4.setProperties()方法:12345Entity entity=new Entity();entity.setXx(“xx”);entity.setYy(100);Query query=session.createQuery(“from Entity c where c.xx=:xx and c.yy=:yy ”); query.setProperties(entity); 5.HQL拼接方法,这种方式是最常用,而且容易忽视且容易被注入的,通常做法就是对参数的特殊字符进行过滤,推荐大家使用 Spring工具包的StringEscapeUtils.escapeSql()方法对参数进行过滤:1234public static void main(String[] args) {String str = StringEscapeUtils.escapeSql("‘");System.out.println(str);} 输出结果:‘‘===================================================================================Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定:PrepareStatement pre=connection.prepare(“select * from User where user.name=?”);pre.setString(1,”zhaoxin”);ResultSet rs=pre.executeQuery();在Hibernate中也提供了类似这种的查询参数绑定功能,而且在Hibernate中对这个功能还提供了比传统JDBC操作丰富的多的特性,在Hibernate中共存在4种参数绑定的方式,下面我们将分别介绍:A、 按参数名称绑定:在HQL语句中定义命名参数要用”:”开头,形式如下:Query query=session.createQuery(“from User user where user.name=:customername and user:customerage=:age ”);query.setString(“customername”,name);query.setInteger(“customerage”,age);上面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。B、 按参数位置邦定:在HQL查询语句中用”?”来定义参数位置,形式如下:Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);query.setString(0,name);query.setInteger(1,age);同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。C、 setParameter()方法:在Hibernate的HQL查询中可以通过setParameter()方法邦定任意类型的参数,如下代码:String hql=”from User user where user.name=:customername ”;Query query=session.createQuery(hql);query.setParameter(“customername”,name,Hibernate.STRING);如上面代码所示,setParameter()方法包含三个参数,分别是命名参数名称,命名参数实际值,以及命名参数映射类型。对于某些参数类型setParameter()方法可以更具参数值的Java类型,猜测出对应的映射类型,因此这时不需要显示写出映射类型,像上面的例子,可以直接这样写:query.setParameter(“customername”,name);但是对于一些类型就必须写明映射类型,比如java.util.Date类型,因为它会对应Hibernate的多种映射类型,比如Hibernate.DATA或者Hibernate.TIMESTAMP。D、 setProperties()方法:在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起,如下程序代码:Customer customer=new Customer();customer.setName(“pansl”);customer.setAge(80);Query query=session.createQuery(“from Customer c where c.name=:name and c.age=:age ”);query.setProperties(customer);setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。这里还有一个特殊的setEntity()方法,它会把命名参数与一个持久化对象相关联,如下面代码所示:Customer customer=(Customer)session.load(Customer.class,”1”);Query query=session.createQuery(“from Order order where order.customer=:customer ”);query. setEntity(“customer”,customer);List list=query.list();上面的代码会生成类似如下的SQL语句:Select * from order where customer_ID=u20191u2019;Hibernate使用中防止SQL注入的几种方案标签:list()获取存在持久化接口.exergsarticlepre
2023-08-04 12:05:251

用SQL server 20000 数据库 查询数据库做题

--创建数据库 create database ProductSales on primary --建立主数据文件 ( name = "ProductSales", --逻辑文件名 filename="e:dataProductSales.mdf", --物理文件路径和名字 size=10Mb, --初始大小 maxsize=100Mb, --最大尺寸为10m filegrowth=10% --增长速度为10% ) log on ( name = "ProductSales_log", --建立日志文件 filename="e:dataProductSales_log.ldf",--物理文件路径和名字 size=2Mb, --初始大小 maxsize=unlimited, --最大尺寸为无限大 filegrowth=1Mb--增长速度为1mb ); --创建产品表 create table Product ( ProductID varchar(64) not null, ProductName varchar(50) null, Price numeric(10,2) null, Stocks int null, constraint PK_DAY_BASICSITE primary key nonclustered (ProductID) ); --创建客户表 create table Customer ( CustomerID varchar(64) not null, CustomerName varchar(200) null, Region varchar(100) null, Charger varchar(20) null, Tel int null constraint PK_DAY_BASICSITE primary key nonclustered (CustomerID) ); --产品销售表 create table Sales ( id varchar(64) not null, ProductID varchar(64) not null, CustomerID varchar(64) not null, Amount int null, Money numeric(10,2) null constraint PK_DAY_BASICSITE primary key nonclustered (id) ); --设置外键关联 alter table Sales add constraint FK_BASIC_CO_CONTACT_C_BASIC_CU foreign key (ProductID) references Product (ProductID); alter table Sales add constraint FK_BASIC_CO_CONTACT_C_BASIC_CU foreign key (CustomerID) references Customer (CustomerID); 一般在实际开发过程中,为了减少麻烦,字段类型基本都可设置为varchar
2023-08-04 12:05:341

SQL将查询结果作为参数进行Insert

可以用insert into table直接将查询结果写入过去但是比较奇怪的是你明明已经在LuBan_Order_MainData表中得到了ID,还要绕到LuBan_CustomerMainData表去查询名称,再去Customer表找对应的ID正常情况下ID不会重复,但名称很有可能重复,你这样去绕不是反而会错?
2023-08-04 12:05:571

编一个程序,定义客户类Customer(有姓名年龄手机号码,帐号,密码五个字段)创建两个客户对象,

class Customer { private String name; private int age; private long Phonenum; private String username; private String password; public void showMessage() { System.out.println(name + " " + age + " " + Phonenum + " " + username + " " + password); } public Customer(String name, int age, long phonenum, String username, String password) { super(); this.name = name; this.age = age; Phonenum = phonenum; this.username = username; this.password = password; }}public class TestCustomer { public static void main(String[] args) { Customer c1 = new Customer("张三", 22, 13112345678L, "zhangsan", "zhangsan123 "); c1.showMessage(); Customer c2 = new Customer("王五", 52, 12345678910L, "zhangsan","wangwu123"); c2.showMessage(); }}
2023-08-04 12:06:151

JSP session值为null问题

你登陆处理页面代码贴出来!!!!!!!!!!!看看
2023-08-04 12:06:253

数据库表里只显示一条数据,页面却显示2条重复的,我把sql语句那栋数据库里,条件查出来得也是2条

你把sql语句贴出来呀?你这肯定有问题。联合查询,还是单表查询。
2023-08-04 12:06:354

获取json中key的值时为空

alert( eval( json[0] )["customerId"] )
2023-08-04 12:06:435

进销存 数据库设计

从头开始说,有几个不合理的地方商品规格表(normstable)商品花纹ID(normsID, int, 4), 商品花纹名(threadName, vchar, 20), 尺寸(goodssize, varchar, 20)你这个表就是一个孤立的表,跟其他表一点关系都没有而且,一个花纹id可能对应多个尺寸,这样就会有很多冗余数据,而且你商品表中根本就没有尺寸及花纹之类的字段----------------------------------------------------------还有退货表中,我觉得应该有一个退货单对应的销售id,要不你这个退货表是从哪笔销售记录退出来的好像就不太明了----------------------------------------------------------仓库表好像也没多大用处啊,正常的话,进了货应该进到仓库里,出库的时候也要从这个库里出货,但是销售表,进货表,退货表中,都没有关于仓库的有关信息----------------------------------------------------------其他的我再看看,看完了再给你追加
2023-08-04 12:06:581

sql的存储过程中可否用table 型作参数,怎样用

存储过程不支持的可以考虑使用用户定义函数来实现,如:CREATE FUNCTION Order_Customer(@FirstName varchar(20),@LastName varchar(20))RETURNS @Order_Customer_Tab TABLE(OrderID int,GoodsName varchar(20),CustomerName varchar(40))BEGININSERT @Order_Customer_TabSELECT OrderID,GoodsName,FirstName+","+LastNameFROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerIDWHERE FirstName = @FirstName AND LastName = @LastNameRETURNEND
2023-08-04 12:07:051

t-sql事务代码问题

错误是0就是在代表是指在set @errorSum=@errorSum+@@error句中 @@error系统变量为0 代表上步执行代码无错误即update bank set currentMoney=currentMoney+1000 where customerName="李四" 这句执行成功
2023-08-04 12:07:121

编程Customer.java:编写Customer类,编程Account.java:编写Account 类,使用上面的两个类,实现如下业务

Customer类:package Test;public class Customer { private String customerId;//客户身份证号 private String custName;//客户姓名 private String custGender;//客户性别 public Customer(String customerId,String custName,String custGender){ this.custGender=custGender; this.custName= custName; this.customerId= customerId; } public String getCustomerId() { return customerId; } public void setCustomerId(String customerId) { this.customerId = customerId; } public String getCustName() { return custName; } public void setCustName(String custName) { this.custName = custName; } public String getCustGender() { return custGender; } public void setCustGender(String custGender) { this.custGender = custGender; } public void printMSG(){ System.out.println("身份证号:"+this.customerId+"姓名:"+this.custName+"性别:"+this.custGender); }}Account类:package Test;public class Account { private String customerId;//该账户所属客户的身份证号 private String accountNo;//账户号 private float balance;//余额 public Account(String customerId,String accountNo,float balance){ this.customerId= customerId; this.accountNo = accountNo; this.balance = balance; } public Account(String customerId,String accountNo){ this(customerId,accountNo,0); } public float deposit(float amount) { System.out.println("本次存款:"+amount); balance= balance+amount; return amount; } public float withdraw (float amount){ System.out.println("本次取款:"+amount); balance= balance-amount; if(balance>=0){ return amount; }else{ return 0; } } public float getBalance(){ return balance; }}Ex4_3类:package Test;public class Ex4_3 { public static void main(String [] args){ //创建两个客户“张三”、“李四”;为张三开设2个账户 //(一个账户开户时就存款2000,另一账户开户时不存款)、 //李四开设1个账户(开户时存款3000)。 Customer customer1 = new Customer("111","张三","男"); Customer customer2 = new Customer("222","李四","女"); Account account1 = new Account(customer1.getCustomerId(),"zhangsan1",2000); Account account2 = new Account(customer1.getCustomerId(),"zhangsan2"); Account account3 = new Account(customer2.getCustomerId(),"lisi",3000); System.out.println("张三第一个账户取款500:"); account1.withdraw(500); System.out.println("张三从第一个账户转账1000到第二个账户中:"); account2.deposit(account1.withdraw(1000)); System.out.println("李四取款300:"); account3.withdraw(300); System.out.println("最后查询出张三与李四的客户信息及账户余额:"); customer1.printMSG(); System.out.println("账户1余额:"+account1.getBalance()+"账户2余额:"+account2.getBalance()); customer2.printMSG(); System.out.println("李四账户1余额"+account3.getBalance());}}
2023-08-04 12:07:221

sql server 中的事务处理控制语句怎样进行实现提交一个事务

--开始一个事务Begin tran--提交一个事务Commit tran--回滚一个事务Rollback Tran
2023-08-04 12:07:301

用sql新建职工信息表“职工(序号,姓名,性别,出生年月,参加工作日期,部门)”

CREATE TABLE [BM]([ID] [nchar](10) NOT NULL ,[NAME] [nchar](10) NULL,,[sex] [nchar](10) NULL,[BirthDATE] [datetime] NULL,[DATE] [datetime] NULL,[BM] [nchar](10) NULL
2023-08-04 12:07:382

cust_name什么意思

自定义的变量名吧,Customer Name的缩写。1.Cust: My name is Tom Cruise and I am in one of the buildings near CBD now.我的名字是Tom Cruise,我现在商业中心区附近的一栋大楼里工作。2. We bought a car cust last month which was registered under my name.上个月我们买了一辆车,是用我的名字登记的。3. Enter the following columns: cust_id (check key column), name, address, and phone.输入以下列:custid(设置为主键列),name,address和phone。4. Note: There will be duplicate info on columns CUST_NUM and CUST_NAME, which will be passed to the customer table and will cause primary key collision.注:在CUSTNUM和CUSTNAME列上有重复信息,它们将被传递到客户表,导致主键冲突。根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。具体步骤如下:/导致这种情况的原因主要是……
2023-08-04 12:07:591

请问custname是什么意思啊?有相关的用法也可以说一下,最好带一小段程序

可能是一个自定义的变量名吧,Customer Name的缩写。
2023-08-04 12:08:061

sql server 2008数据库提示错误create view必须是批处理中仅有的语句

gocreateviewview_userinfo/*用户表视图*/asselectcustomerID顾客编号,customerName开户名,PID身份证号码,telephone联系电话,address地址fromuserinfogo
2023-08-04 12:08:162

vb全局变量太多怎么办

在用VB开发软件时,经常需要在不同的窗体间共享数据,但在过多的使用全局变量时不便于软件的调试和修改。通常有两种解决方法。第一种方法:定义全局变量,然后在各个窗体中直接使用,例如Public strCustomerID As StringPublic strCustomerName As String第二种方法:添加一个模块专门用于定义变量,然后定义一些Public过程或函数来设置和获取这些数据,例如Dim strCustomerID As StringDim strCustomerName As StringPublic Sub SetCustomerID(CustomerID As String)strCustomerID = CustomerIDEnd SubPublic Function GetCustomerID() As StringGetCustomerID = strCustomerIDEnd FunctionPublic Sub SetCustomerName(CustomerName As String)strCustomerName = CustomerNameEnd SubPublic Function GetCustomerName() As StringGetCustomerName = strCustomerNameEnd Function其实这两种方法都有缺点,使用第一种方法时,当过程或函数中过于频繁的使用全局变量时会给调试和修改程序带来很大的工作量,有时会产生灾难性的后果。使用第二种方法时,若共享数据很多,则需要定义很多的Set*和Get*函数。
2023-08-04 12:08:231

请问,在英文的酒店用语中,酒店住宿结账单怎么说?还有客人姓名,入住时间,结账时间,顾客签字。多谢

酒店住宿结账单 check out客人姓名 customer"s name入住时间 check-in time结账时间 check-out time顾客签字 customer"s signature
2023-08-04 12:08:333

如何用JavaScriptSerializer

一、JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。您无法访问序列化程序的此实例。但是,此类公开了公共 API。因此,当您希望在托管代码中使用 JavaScript 对象符号 (JSON) 时可以使用此类。若要序列化对象,请使用 Serialize 方法。若要反序列化 JSON 字符串,请使用 Deserialize 或 DeserializeObject 方法。若要序列化和反序列化 JavaScriptSerializer 本身不支持的类型,请使用 JavaScriptConverter 类来实现自定义转换器。然后,使用 RegisterConverters 方法注册转换器。托管类型和 JSON 之间的映射下表显示序列化进程中托管类型和 JSON 之间的映射。JavaScriptSerializer 本身支持这些托管类型。将 JSON 字符串反序列化为托管类型时,采用相同的映射。但是,反序列化可能是非对称的,并非所有可序列化的托管类型都可以从 JSON 反序列化得到。二、通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization如果要使用它,还须添加System.Web.Extensions库文件引用参考实体类:Customerpublic class Customer{ public int Unid { get; set; } public string CustomerName { get; set; }}类JavaScriptSerializer描述:为启用 AFAX 的应用程序提供序列化和反序列化功能。(一) 序列化方法:public string Serialize(Object obj),用于将对象转换为 JSON 字符串public string ScriptSerialize(Customer customer) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(customer); }测试:Customer cc = new Customer { Unid = 1, CustomerName = "John" }; string strJson = ScriptSerialize(cc); Console.WriteLine(strJson);(二)反序列化public Customer ScriptDeserialize(string strJson) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Deserialize<Customer>(strJson); }通过Deserialize<T>方法来实现。测试:Customer c1 = ScriptDeserialize(strJson);Console.WriteLine(c1.Unid + " " + c1.Custome
2023-08-04 12:08:401

急急急~~汇编问题

一楼正解,我编译通过了initz macro mov ax,@data mov ds,ax mov es,ax endm prompt macro messge mov ah,09h lea dx,messge int 21h endm finish macro mov ax,4c00h int 21h endm .model small .386 .stack 200h .data messg1 db "Customer name?",13,10,"$" messg2 db "Customer address?",13,10,"$" .code begin proc far .sall initz .xall prompt messg1 .lall prompt messg2 .xall finish begin endp end begin
2023-08-04 12:08:483

如何用JavaScriptSerializer

一、JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。您无法访问序列化程序的此实例。但是,此类公开了公共 API。因此,当您希望在托管代码中使用 JavaScript 对象符号 (JSON) 时可以使用此类。若要序列化对象,请使用 Serialize 方法。若要反序列化 JSON 字符串,请使用 Deserialize 或 DeserializeObject 方法。若要序列化和反序列化 JavaScriptSerializer 本身不支持的类型,请使用 JavaScriptConverter 类来实现自定义转换器。然后,使用 RegisterConverters 方法注册转换器。托管类型和 JSON 之间的映射下表显示序列化进程中托管类型和 JSON 之间的映射。JavaScriptSerializer 本身支持这些托管类型。将 JSON 字符串反序列化为托管类型时,采用相同的映射。但是,反序列化可能是非对称的,并非所有可序列化的托管类型都可以从 JSON 反序列化得到。二、通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization如果要使用它,还须添加System.Web.Extensions库文件引用参考实体类:Customerpublic class Customer{ public int Unid { get; set; } public string CustomerName { get; set; }}类JavaScriptSerializer描述:为启用 AFAX 的应用程序提供序列化和反序列化功能。(一) 序列化方法:public string Serialize(Object obj),用于将对象转换为 JSON 字符串public string ScriptSerialize(Customer customer) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(customer); }测试:Customer cc = new Customer { Unid = 1, CustomerName = "John" }; string strJson = ScriptSerialize(cc); Console.WriteLine(strJson);(二)反序列化public Customer ScriptDeserialize(string strJson) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Deserialize<Customer>(strJson); }通过Deserialize<T>方法来实现。测试:Customer c1 = ScriptDeserialize(strJson);Console.WriteLine(c1.Unid + " " + c1.Custome
2023-08-04 12:08:551

Property Let的调用不

如果是一个类里的,类名为 Userprivate vName as string "这里真实的存东西的"写一个属性public property let Name(value as string )"这里的name就是别人传过来的值 vname=value"这里是直接等了,你可以在这里入一些代码 又如有性别问题.如果name值变了,你可以清除为空,如果你的类有事件,可以触发你的事件end properptypublic property get Name as string "别人取值时返回的值,你也可以加入一些自己的处理代码 Name=vNameend property"""""也可以有参数的属性"egproperty let Tels(value as string,index as integer ) "如果上面有一个数组类的,你就可以这样用 "如果上面的数组名为 vTels() as string " vtels(index)=value"就可以这样用end proerptyproperty get Tels(index as integer) as string Tels=vtels(index)end property"类的使用 dim t as new usert.name="名称1""这时就会发生你类的let 过程 msgbox t.name "这里就会发生 name 的get 过程t.tels(1)="110""就会发生 tel 的 let 过程 msgbox t.tels(1)" 就是 get 了
2023-08-04 12:09:021

存储过程,找不到参数

那是你存储过程的问题啦~比如这样Create Proedure procone(@CustomerName varchar(20),@CustomerPass varchar(20))as...这样你就带了无输出值的参数,你看你代码里面有遗漏的参数或是参数的类型不对?
2023-08-04 12:09:201

c#读取json

先声明,以下两个方法我一直用肯定没有问题TXT读取方法using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace WindowsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }private void Form1_Load(object sender, EventArgs e) { this.rT1.Text = ""; FileStream fs1 = new FileStream("2.txt", FileMode.Open); StreamReader sr = new StreamReader(fs1); string str1 = sr.ReadToEnd(); this.rT1.Text = str1; sr.Close(); fs1.Close(); }}}----------------------------------------------------------------------------------以下是 json的 序列化和反序列化.net3.5提供了json对象序列化与反序列化的类。位置在:System.Runtime.Serialization.Json空间下。其中如果要应用这个空间还必须添加对System.ServiceModelSystem.ServiceModel.Web这两个库文件的引用。参考实体类:Customerpublic class Customer{ public int Unid { get; set; } public string CustomerName { get; set; }}DataContractJsonSerializer将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。无法继承此类。其中有个方法WriteObject,它的功能定义为:将对象序列化为 JavaScript 对象表示法 (JSON) 文档它有三个方法重载,其中一个为:public override void WriteObject(Stream stream,Object graph)它的功能描述这:将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中 (一)序列化public string ToJson(Customer customer){ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer)); MemoryStream ms=new MemoryStream(); ds.WriteObject(ms, customer); string strReturn=Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return strReturn;}创建类实例,通过它的WriteObject方法来向流写入序列化的对象,再把流写入到字符串中。就可以得到JSON对象。测试一下:Customer cc = new Customer {Unid=1,CustomerName="John" };string strJson = ToJson(cc);Console.WriteLine(strJson);结果为:{"CustomerName":"John","Unid":1}(二)反序列化ReadObject方法,其描述为:反序列化 JSON(JavaScript 对象表示法)数据,并返回反序列化的对象。它有很多重载,现在通过一种:public override Object ReadObject(Stream stream)它从流中得到反序列化的对象。public object FromJson(string strJson){ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)); return ds.ReadObject(ms);}测试:string strJson="{"CustomerName":"John","Unid":1}";Customer c=FromJson(strJson) as Customer;Console.WriteLine(c.Unid+" "+c.CustomerName);(三)通过泛型方法对两者进行修改为了适应多类型实例的序列化与反序列化,通过泛型方法来实现。public string ToJson<T>(T t){ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ds.WriteObject(ms, t); string strReturn = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return strReturn;} public T FromJson<T>(string strJson) where T:class{ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)); return ds.ReadObject(ms) as T;}u2022反序列化时通过泛型约束来指定类型T为类类型。测试:Customer cc = new Customer {Unid=1,CustomerName="John" };string strJsons = ToJson<Customer>(cc);Console.WriteLine(strJsons); string strJson="{"CustomerName":"John","Unid":1}";Customer c = FromJson<Customer>(strJson);Console.WriteLine(c.Unid+" "+c.CustomerName);
2023-08-04 12:09:271

如何用post的方式请求一个action

方法1:根据【成功控件】定义,我们设置按钮的name,在服务端用name来区分哪个按钮的提交:HTML代码<form action="Handler1.ashx" method="post"><p>客户名称: <input type="text" name="CustomerName" style="width: 300px" /></p><p>客户电话: <input type="text" name="CustomerTel" style="width: 300px" /></p><p><input type="submit" name="btnSave" value="保存" /> <input type="submit" name="btnQuery" value="查询" /></p></form>服务端处理代码// 注意:我们只要判断指定的name是否存在就可以了。 if( string.IsNullOrEmpty(context.Request.Form["btnSave"]) == false ) { // 保存的处理逻辑}if( string.IsNullOrEmpty(context.Request.Form["btnQuery"]) == false ) { // 查询的处理逻辑}方法2:我将二个按钮的name设置为相同的值(根据前面的成功控件规则,只有被点击的按钮才会提交),在服务端判断value,示例代码如下:<form action="Handler1.ashx" method="post"><p>客户名称: <input type="text" name="CustomerName" style="width: 300px" /></p><p>客户电话: <input type="text" name="CustomerTel" style="width: 300px" /></p><p><input type="submit" name="submit" value="保存" /> <input type="submit" name="submit" value="查询" /></p></form>string action = context.Request.Form["submit"];if( action == "保存" ) { // 保存的处理逻辑}if( action == "查询" ) { // 查询的处理逻辑}当然了,解决这个问题的方法很多,我们还可以在提交前修改form.action属性。 对于MVC来说,可能有些人会选择使用Filter的方式来处理。最终选择哪种方法,可根据各自喜好来选择。
2023-08-04 12:09:351

javascript 代码生成一个span标签,但是当点击该标签时要调用某个函数,而且需要传参数,这参数该怎么传?

newSelect.innerHTML = "<span style="cursor:hand;" onclick="showAddress("" + customer+"");"">[选择]</span>"
2023-08-04 12:09:443

如何将EXCEL表按另一个EXCEL表中的内容进行搜索,然后将结果复制到新的工作表中?

一楼二楼的兄弟答得都不错,但实践性都不强,一个要记函数,一个更是要去学习编程,其实这个问题我们完全可以使用“高级筛选”来实现。同时常握了高级筛选你还可以解决很多类似的问题。来试试吧!!在客户资料详表中执行数据——筛选——高级筛选。列表数据是表“客户资料详表”中的数据(一般程序会自动选上),条件区域选择“客户资料详表”表中的客户名称列中的数据,注意不是整列,是从标题到结束的数据。同时,你要确保,“客户资料详表”中也这个表中的相同的列数据,注意,标题名称一定要相同。确定后,“客户资料详表”中就只显示和另一个表具有相同客户名称的数,将其自制粘贴至新表即可。另:如果有什么问题你可以查查程序的帮助。相信你会从中获益非浅的。
2023-08-04 12:09:543