aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 23812|回复: 12

sqlServer 数据库基本操作: 增、删、改、查

[复制链接]

29

主题

658

回帖

4138

积分

超级版主

积分
4138
发表于 2013-6-26 20:47:27 | 显示全部楼层 |阅读模式
参考帖子:
Access数据库基本操作: 增、删、改、查

sqlServer 与 access 支持库的接口与用法基本一样( 封装后提供一致的接口 );
  1. import sqlServer;
  2. import console;

  3. //创建数据库
  4. var db,err  = sqlServer(
  5.         ["Data Source"]= "127.0.0.1,778";
  6.         ["Database"]= "数据库名";
  7.         ["User ID"]= "用户名";
  8.         ["Password"]= "用户密码";
  9. )
  10. assert(  db,err );

  11. //创建表
  12. if(!db.existsTable("homepage2") ){
  13.         db.exec("create table homepage2 (url char(30), comment char(20))")
  14. }

  15. //使用命令参数 - 参数化可避免SQL注入
  16. var cmd = db.createCommand( "insert into homepage2(url,comment) values(@url,@comment)" );  
  17. cmd.bind("homepage2").parameters(
  18.         url = "http://www.aardio.com";
  19.         comment = "hi!";
  20. )
  21. cmd.Execute() //执行命令

  22. //增 - 调用 access.formatParameter() 格式化命名参数生成SQL语句
  23. db.exec( "insert into homepage2(url,comment) values(@url,@comment)",{
  24.         url = "http://www.aardio.net";
  25.         comment = "字符串包含'单引号' 测试一下"
  26. } )

  27. //删 - 自动调用 string.format() 函数格式化SQL语句,简单拼接字符串应避免包含单引号
  28. db.exec("delete from homepage2 where url='%s'","http://www.aardio.com");

  29. //改
  30. db.exec("update homepage2 set url='%s' where comment='%s' ","http://bbs.aardio.com","这是说明")

  31. //查
  32. for(rs,fields in db.each("select * from homepage2") ){
  33.         console.log( rs("url").value,rs("comment").value )  
  34. }

  35. //将查询结果转换为普通数组
  36. var tab = db.getTable("select * from homepage2");
  37. console.varDump(tab);

  38. //关闭数据库连接
  39. db.close();
复制代码
可以看到与access的代码完全一样。
SQLOLEDB是不支持命名参数的,但是aardio提供的支持库已经支持命名参数 - 并且使用非常简洁。


评分

参与人数 1 +1 收起 理由
﹎灬随缘ゞ + 1 那是连接数据库,而不是创建数据库吧

查看全部评分

29

主题

658

回帖

4138

积分

超级版主

积分
4138
 楼主| 发表于 2013-6-26 20:53:03 | 显示全部楼层
这里主要说明一下连接SQL Server的方法。
在 sqlServer() 的构造函数中可以直接用一个字符串写SQL连接串 - 如果提供更多参数则调用string.format() 自动格式化。

连接字符串示例1:
var db = sqlServer( "Provider=SQLOLEDB.1;Data Source=.;Initial Catalog=%s;UID=%s;PWD=%s",数据库名字,用户名,登录密码 )

连接字符串示例2:
var db = sqlServer( "Provider=SQLOLEDB.1;Data Source=.;UID=sa;PWD=wzb0227;Initial Catalog=数据库名;" )
//参数Data Source 是 Server 的别名,UID则是 User ID 的别名....参考下面的连接参数说明

连接字符串示例3:
var db = sqlServer( "Provider=SQLOLEDB.1;Data Source=(local);Initial Catalog=数据库名;User ID=sa;Password=sa;Connect Timeout=180;" )

sqlServer() 的构造函数也可以用一个table表作为参数( 上面发的源码示例就是这样用  ),这时候会自动生成连接串。
因为会自动提供缺省的连接参数 - 所以连接数据库只要提供一些简单的参数。

如果是本机安装的SQL Server可以非常简单的连接数据库,如下:
import sqlServer;

//连接数据库
var db,err  = sqlServer(
    server
= ".\SQLEXPRESS";//本机默认实例可省略此参数     
    database = "数据库名";
)

上面连接参数不提供用户名、密码 - 则会自动添加 Integrated Security=SSPI参数以支持windows账号自动登录。

其他连接参数说明( 忽略大小写)
["Data Source"]:别名(Server、Address、Addr ),
如果是本地数据库且定义了实例名,则可以写为"Server=(local)\实例名";
(local)也可以用一个圆点表示。例如上面的 ".\SQLEXPRESS"(SQL Sever Express)
如果是远程服务器,则将"(local)"替换为远程服务器的名称或IP地址。

["Initial Catalog"]:可以使用别名(Database), 设置数据库名字

["User ID"]:可以使用别名(UID),设置登录用户名

["Password"]:可以使用别名(PWD),设置登录密码

["Connect Timeout"]:设置连接超时.

["Integrated Security"] 这个值设为SSPI表示启用Windows登录( 本机数据库服务器一般支持这种方式 ),如果设置了这个值就不要再使用"User ID"和"Password"这样的SQL账号来登录, 如果不使用Windows账号登录不要设置这个值 - 如果同时设置的话可能会登录失败

可以使用 db.connection.ConnectionString 获取最后生成的连接串。



26

主题

76

回帖

649

积分

荣誉会员

积分
649
发表于 2013-6-27 15:25:50 | 显示全部楼层
太好了!版主一下把这几种都讲了

6

主题

51

回帖

579

积分

三级会员

积分
579
发表于 2013-6-27 17:05:29 | 显示全部楼层
学习,多谢分享

16

主题

118

回帖

914

积分

三级会员

积分
914
发表于 2013-6-27 20:21:02 | 显示全部楼层
太感谢了,今天下午才接领导一个任务,与MSSQL有关,正好借鉴一下

0

主题

37

回帖

363

积分

二级会员

积分
363
发表于 2013-6-30 00:09:08 | 显示全部楼层
几种都讲了

16

主题

118

回帖

914

积分

三级会员

积分
914
发表于 2013-6-30 09:50:21 | 显示全部楼层
本帖最后由 vbvfp 于 2013-6-30 10:49 编辑

请教各位高手,我用
var db,err  = sqlServer(
        server= ".\SQLEXPRESS";
        database= "数据库名";
        uid = "用户名";
        pwd= "用户密码";
)
联好MSSQL数据库后,如何遍历该数据库中的所有表名?
我知道纯SQL命令是:
select name from sysobjects where type='u'
执行它将得到一个用户表的name列表
但我不知道用aardio如何实现它?请赐教,谢了先

16

主题

118

回帖

914

积分

三级会员

积分
914
发表于 2013-6-30 11:26:26 | 显示全部楼层
本帖最后由 vbvfp 于 2013-7-1 06:43 编辑

自己尝试,终于成功,其实代码很简单:
for(rs,fields in db.each("select name from sysobjects where type='u'") ){
        console.log(rs("name").value )  
}

0

主题

1

回帖

6

积分

新手入门

积分
6
发表于 2014-7-3 17:13:10 | 显示全部楼层
远程数据库怎么设置?数据库不在默认端口上怎么设置?

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2017-11-17 20:28:49 | 显示全部楼层
appleat 发表于 2014-7-3 17:13
远程数据库怎么设置?数据库不在默认端口上怎么设置?

var db = sqlServer(
    server=
"IP地址,端口号";
    database=
"数据库名";
    uid =
"用户名";
    pwd=
"密码";
)


1

主题

4

回帖

37

积分

新手入门

积分
37
发表于 2018-1-24 18:01:50 | 显示全部楼层
如何调用存储过程呢,怎么传参,以及接收存储过程的返回值?

1

主题

4

回帖

37

积分

新手入门

积分
37
发表于 2018-3-24 18:19:47 | 显示全部楼层
如何判断新增,修改 返回成功行数?
如何 接收 执行 带有返回参数(output)的存储过程 的 返回值?

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-3-24 20:03:50 | 显示全部楼层
api 发表于 2018-3-24 18:19
如何判断新增,修改 返回成功行数?
如何 接收 执行 带有返回参数(output)的存储过程 的 返回值?

请不要重复发帖,
这些问题可以找本SQL语法手册看一下,
获取修改行数用 SELECT @@rowcount

执行存储过程看一下范例里有,
输出参数直接获取值就可以 cmd.parameters("@parameter").value
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-9-15 20:27 , Processed in 0.067039 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表