JSON

EasyASP 使用教程 [EasyASP v3(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-04 11:02 我要评论( )

再来看 EasyASP 是如何处理带变量参数的查询的,下面的例子一个是插入记录,一个是取记录集:插入一条新记录Easp.Db.Exec(Insert Into table_name (field1, field2) Values ({f1}, {f2}))获取记录集Set rs = Easp.D

再来看 EasyASP 是如何处理带变量参数的查询的,下面的例子一个是插入记录,一个是取记录集: '插入一条新记录 Easp.Db.Exec("Insert Into table_name (field1, field2) Values ({f1}, {f2})") '获取记录集 Set rs = Easp.Db.Exec("Select * From table_name Where field1 = {f1} And field2 = {f2}") 相信你看出来了,其中的f1和f2应该是可以用变量的条件,那么,它们的值是如何代入SQL中呢?我知道你非常想这样: f1 = "value1" f2 = Now() Easp.Db.Exec("Insert Into table_name (field1, field2) Values ({f1}, {f2})") 但是由于 ASP 语法的限制,暂时还无法实现上面的做法,在 EasyASP 中,采用了还是非常简单的做法,所有SQL语句中的变量用 Easp.Var("变量名") 来赋值即可: Easp.Var("f1") = "value1" Easp.Var("f2") = Now() Easp.Db.Exec("Insert Into table_name (field1, field2) Values ({f1}, {f2})") 这样就可以了,不再用看起来傻缺到无以复加的字符串变量和引号、& 连接符去“中断” SQL 语句,也不用考虑参数的顺序,最重要的是,你完全可以不用去管参数是什么类型的数据(想想你平时比如忘记了在文本型字段值的两端加单引号而带来的种种噩梦吧)。Easp.Var("变量名") 这种用法在 EasyASP 里叫做“超级变量”,详细的说明请查看“”一节。这里你只需要知道,所有的 Get/Post/ServerVariables 值已经内置在超级变量中了,所以如果要使用这些值是不用再自己写超级变量的,直接在 SQL 中使用就行了!具体怎么使用这些值,请看下一节的说明。

但是,这里还留下几个问题,第一,如果我想要指定参数的类型和大小怎么办?在 EasyASP 里,非常好办: Easp.Db.Exec("Insert Into table_name (field1, field2) Values ({f1:nvarchar(100)}, {f2:datetime})") 看到了吧,直接在参数名后跟一个冒号,然后写入参数的类型和大小即可(大小可省略)。

第二,如果 SQL 语句中有不是参数的部分要代入变量,怎么办?什么是不是参数的部分呢,就是 SQL 语句中不是作为查询参数的部分,比如表名(表前缀)、字段名、Where条件表达式等。通常的方法是这样的: Dim frontstr frontstr = "field" Easp.Db.Exec("Insert Into table_name (" & frontstr & "1, " & frontstr & "2) Values ({f1:nvarchar(100)}, {f2:datetime})") 很破坏阅读性有木有?所以,EasyASP 给出的解决方法是这样的,当然还是要用到超级变量: Easp.Var("frontstr") = "field" Easp.Db.Exec("Insert Into table_name ({=frontstr}1, {=frontstr}2) Values ({f1:nvarchar(100)}, {f2:datetime})") 只需要像使用不带类型和大小的参数一样使用,在参数名前面加一个等号即可,它会把超级变量的值替换到 SQL 语句中去。 注意:使用 {=超级变量} 存在注入风险,所以这个变量的值应该由您在程序中指定而不是从 Get/Post/Cookies 提交而来。

再写一个结合超级变量的用于模糊搜索的 SQL 语句示例,假设提交的搜索关键字参数名为 key (*.asp?key=新闻): Easp.Var("likeKey") = "%{=key}%" Set rs = Easp.Db.Query("Select * From news Where Title Like {likeKey}")

第三,如果我的 SQL 语句中有 in(…) 这样的写法,又该怎么在 EasyASP 中写代码呢?还是那句话,So easy! Easp.Var("myArr") = Split("1 3 4 6 7") '首先,要有一个变量超级数组(也可以是QueryString/Form数组) Call Easp.Db.Exec("delete from t where id in ({(myArr:int)})") '执行的语句会是 delete from t where id in (1, 3, 4, 6, 7) 只需要把数组超级变量用 {(变量名)} 一对括号括起来放在标签中就行啦,有数据类型的时候,和普通标签一样加在变量名后就行了,如果是字符串,也是一样的操作方式,下面的例子有点小变化,参数只做为in条件里的一部分: Easp.Var("myArr") = Split("one,two,three", ",") Call Easp.Db.Exec("delete from t where id in ('zero', {(myArr)}, 'four')") '执行的语句会是 delete from t where id in ('zero', 'one', 'two', 'three', 'four')

最后,再次提示一下,超级变量的功能很强大,可以让你轻松的做到不用写一行代码去读取表单提交的值就把数据插入到数据库中啦,请从下一节“”中查看。

数据的基本操作

EasyASP v3 推荐所有的读增改删都通过输入完整的 SQL 语句来操作,你可以用下面这两个方法,它们略有不同: Easp.Db.Query(sql) Easp.Db.Exec(sql) 在 sql 是 Select 语句即是取记录集的时候,这两个方法是完全一样的。但在 sql 是 Insert / Update / Delete 语句的时候,Easp.Db.Query 返回的是一个布尔值,表示成功与否,比如使用 Delete 语句删除记录时,如果 sql 执行有错误或者 sql 语法正确但是没有删除任何记录,都会返回 False 值。而 Easp.Db.Exec 返回的是受影响的行数。

数据的读增删改

EasyASP 同样提供了一组方法用于数据的 CRUD 操作: '读取记录集 Set rs = Easp.Db.Sel(sql) '新增记录 result = Easp.Db.Ins(table, field:value[,field:value...]) '更新记录 result = Easp.Db.Upd(table, field=value[,field=value...], where) '删除记录 result = Easp.Db.Del(table, where) 下面给出一些示例代码,首先是读取记录集的方法: '读取记录集 Set rs = Easp.Db.Sel("Select * From table_name where class_id = {cid} Order By ID Desc") 这个方法和 Easp.Db.Query 和 Easp.Db.Exec 的不同之处在于,此方法始终返回记录集对象,即使 sql 语句不是 Select 语句。用一个 MSSQL 的例子来说明这个方法的一些特殊应用吧,假设一个 MSSQL 的数据库表采用了自增字段作为主键,那么可以用此方法在插入数据的同时得到新插入的记录的ID号或是包含新记录的记录集: '返回MSSQL自增ID及新增记录示例: Dim rs Easp.Var("name") = "coldstone" Set rs = Easp.Db.Sel("Insert Into Tb (TName, TDate) Values ({name}, {easp.date});Select @@Identity As ID;Select * From Tb Where ID = @@Identity;") Set rs = Easp.Db.NextRS(rs) Easp.PrintlnString rs '{"total":1, "rows":[{"ID":31}]} Set rs = Easp.Db.NextRS(rs) Easp.PrintlnString rs '{"total":1, "rows":[{"ID":31, "TName":"coldstone", "TDate":"2014-06-23"}]} Easp.Db.Close(rs) 当用此方法返回多个记录集的时候,可以用 Easp.Db.NextRS 返回下一个记录集对象。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • FineReport帮助文档

    FineReport帮助文档

    2017-08-04 10:02

  • JAVA中使用JSON进行数据传递示例

    JAVA中使用JSON进行数据传递示例

    2017-08-03 18:00

  • Gson和Fastjson的使用

    Gson和Fastjson的使用

    2017-08-03 10:02

  • 【转】JMeter学习(三十五)使用jmeter来发送json

    【转】JMeter学习(三十五)使用jmeter来发送json

    2017-08-01 16:02

网友点评
h