Q:所属区域我用了DropDownList控件
当省改变时 市也跟着改变
但是input的内容都被清空了 这我不白填了吗 怎么解决这问题
我用TextBox控件就没问题
但我用TextBox 那所有的input都得换为TextBox了
有好得办法吗
A:当然会清空,TextBox 保存 VieState,客户端普通的input 不会自动保存,加上 runat="server" 如:<td><input type="text" name="Name"></td>
改为<td><input runat="server" type="text" name="Name"></td>
Q:验证控件使用regularexpressionvalidator
A:
用Html控件input 必须要id="Zip_Code"不能为空 runat="server"变为服务器控件
<input class="text1" id="Zip_Code" type="text" value="00000" name="Zip" runat="server">
<asp:regularexpressionvalidator id="RegularExpressionValidator1" runat="server" ControlToValidate="Zip_Code" Font-Size="11"Display="Dynamic"
ValidationExpression="[0-9]{5}">
* 邮政编码必须是 5 位数字<br></asp:regularexpressionvalidator>
ControlToValidate="Zip_Code" 关联Input控件的id
ValidationExpression="[0-9]{5}" 是验证类型
Q:怎么禁止别人通过sql企业管理器连上我的SQl数据库
A:
修改SqlServer默认的1433端口 1433端口 打开Microsoft SQL Server--服务器网络实用工具--启用的协议--TCP/IP--属性--默认端口
Q:插入/更新数据库Sql的最佳写法
大家存在5点误区:
1、sql注入比较难防,需要替换select,delete等一打字符
其实对于字符型替换再多都没有替换单引号为两个单引号来的好!对于数字型替换再多都没有用,一定要类型转换。
2、忽略DropDownList传来的东西
其实是不对的,一切客户端的东西都是不可信任的,select下拉框也是!因为可以自己做一个htm提交到服务器。
3、access比sqlserver不安全
安全不安全关键看怎么用,如果sqlserver还是像access一样用,一个sa帐户的话,很明显,sqlserver比access不安全,可以直接得到表名和字段名!access反而
倒安全点了,因为只能通过逐位猜解得到。
4、网站没有显示出错信息就说明网站是安全的
当有记录的时候显示记录,没有记录的时候显示找不到任何记录,通过这两种状态就可以猜解字段名了,所以网页不出错不能说明是安全的
5、忽略post提交的信息
很多人对url上传递的东西过滤严格,对于post的东西不理不睬是不对的,post的东西更加容易被注入,因为一般字段比较多
在asp.net中强烈建议通过参数来实现sql而不是sql拼接,因为就算你每一个都过滤百密难有疏
比如:
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlCommand comm=new SqlCommand("update tb1 set vName=@vName,iAge=@iAge where ID=@id",conn);
SqlParameter parm1=new SqlParameter("@vName",SqlDbType.NVarChar,50);
parm1.Value=((TextBox)e.Item.FindControl("name")).Text;
SqlParameter parm2=new SqlParameter("@iAge",SqlDbType.Int);
parm2.Value=((TextBox)e.Item.FindControl("age")).Text;
SqlParameter parm3=new SqlParameter("@id",SqlDbType.Int);
parm3.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
comm.Parameters.Add(parm1);
comm.Parameters.Add(parm2);
comm.Parameters.Add(parm3);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
这样的代码看起来舒服而且又安全,何乐不为?