说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中更改SQL Server数据库结构

HTML文档下载 WORD文档下载 PDF文档下载
在VB中更改SQL Server数据库结构
四川省冕宁县
陈锦平
---- 笔者在开发"凉山州林业局"天然林资源保护综合管理系统中,需要为程序建立Sql Server数据库的运行环境。为了方便用户,笔者开发了这个数据库配置工具。完成在SQL Server数据库中建立设备,建立数据库,建立表格,分配权限的功能,"凉山州林业局"系统中的所有数据库配置操作都可以通过这个小工具完成。方便了数据库应用程序所需Sql Server环境的建立,根本不用启动SQL Enterprise Manager配置数据库。

---- 这个小工具由VB开发,利用ADO 访问数据库,实现更改数据库结构,其他语言也可以此作为参考。启动VB6.0,新建一个工程,在菜单-工程-引用里选"Microsoft ActiveX Data Objects 2.0 Library",代码里需要有 dim conn As New ADODB.Connection 注释:定义ADO数据库对象 conn.ConnectionString = "driver={SQL Server};" & _
"server=" & ServerName & ";uid=" & UserName &
";pwd=" & Password & ";database=" & DatabaseName & "" 注释:连接数据串 conn.open 注释:连接数据库 注:ServerName为服务器名;UserName为用户名;Password为用户口令; DatabaseName要登录的数据库名,可以为空。核心代码如下:

一、 建立数据库

---- 原理:建立数据库先要初始化一个数据库设备,然后在此设备上建立数据库。所有的设备名在系统表"sysdevices"里有记录,所有的数据库名在系统表"sysdatabases"里有记录。在建立之前,最好先查询这两个系统表,看名称是否已经存在。在建立设备之前,还需要的一个物理名和空闲的设备标识号。

---- 初始化设备语法:DISK INIT NAME="device_name",PHYNAME="physical_name",VDEVNO=device_number, SIZE=numberofblock 说明:这里,NAME是数据库设备名(一个有效的标识符),PHYNAME(数据库设备的物理名)是原始的磁盘分区UNIX或外设(vms)名,或者是操作系统的文件名。VDEVNO时数据库的设备标识号,合法值为1-255,SIZE的单位是2KB的块,例如1MB(1024KB)时SIZE值为512。

---- 建立数据库语法:CREATE DATABASE database_name [ON database_device]

---- 说明:database_name是要建的数据库名,database_device是设备名

---- 要新建立一个数据库,就需要设备名,数据库名,物理名和设备号。具体步骤如下:

---- 我们假设用户要新建立设备dbName,在设备dbName上建立数据库dbName。

---- 1)得到设备名。dbName是用户给出的设备名;先查询系统表sysdevices,看用户给出的设备名dbName是否已经存在,如果此设备名存在,就需要更换一个设备名,因为设备名是唯一的。

sql = "select * from sysdevices
where name=注释:" & dbName & "注释:"
Set rs = conn.Execute(sql)
If Not rs.EOF Then
MsgBox "设备名"" & dbName &
""已存在!", 16, "请重新输入名称"
Exit Sub
End If
---- 2)得到数据库名。dbName是用户给出的数据库名;查询系统表sysdatabases,看用户给出的数据库名dbName是否已经存在,如果此数据库存在,就需要更换一个数据库名,像设备名一样,数据库名也是唯一的
sql = "select * from sysdatabases
where name=注释:" & dbName & "注释:"
Set rs = conn.Execute(sql) 注释:下面代码略
---- 3)得到PHYNAME物理名。查询服务器上数据库文件的物理位置serverpath,典型的,我们可以从系统表sysdevices中查询master(这是SQL Server的主库名)数据库的位置,例如G:\MSSQL\DATA\MASTER.DAT,则我们的数据库可以建在"G:\MSSQL\DATA\"目录下。 sql = "select name,phyname from sysdevices " 注释:low/16777216为设备号Set rs = conn.Execute(sql) 然后遍历记录对象rs,当name="master"时,取出phyname,从而可以得到物理位置serverpath =G:\MSSQL\DATA\。
---- 4)得到一个空闲的设备号vdevno

---- 设备号合法值1~255,遍历这些号,查找出未被使用的空闲设备号,下面程序得到已有的设备号 sql = "select distinct low/16777216 from sysdevices order by low/16777216" 注释:low/16777216为设备号 5)建立数据库。所需的信息都准备完毕,可以建立数据库了(注:下面的"" & Chr(34) & ""就是一个"""双引号,这样处理后,才能满足语法要求;数据库为20M,则dbSize=512*20)

---- sql = "DISK INIT NAME=" & Chr(34) & "" & dbName & "" & Chr(34) & ",PHYSNAME=" & Chr(34) & "" & serverpath & "" & dbName & ".dat" & Chr(34) & ",VDEVNO=" & vdevno & ",SIZE=" & dbSize & ""

---- Set rs = conn.Execute(sql) 注释:初始化设备

---- sql = "CREATE DATABASE " & dbName & " on " & dbName & "=" & dbSize & ""

---- 注释:注:第一个dbName是数据库名,第二个dbName是设备名

---- Set rs = conn.Execute(sql)注释:在设备dbName上建立数据库dbName

---- MsgBox "数据库"" & dbName & ""建在服务器上"" & serverpath & "" & dbName & ".dat",建立成功!", 64, "成功"

二、建立表格

---- 建立表格比较简单,这里用到了自动计数字段和缺省值字段类型,语法如下:

CREATE TABLE table_name(field_name data_type [NOT NULL|NULL],…)
---- 说明:table_name为新建的表名,field_name为字段名,data_type为数据类型。
---- (注意下面的fileid int IDENTITY字段自动计数,datetime NOT NULL DEFAULT(GETDATE())字段每当入库时有个缺省值,由数据库生成当时的时间)。

sql = "CREATE TABLE " & TableName &
"(fileid int IDENTITY, filetime datetime NOT NULL
DEFAULT(GETDATE()),fileimage image NULL )"
---- conn.Execute sql 注释:建立表格
三、建立用户组用户

---- 建立用户组和用户不能直接通过SQL语句完成,需要执行SQL Server的存储过程sp_addlogin,sp_addgroup, sp_adduser。我们假设新建登录账号是username1,用户名是username1,组名是group1,则步骤如下:

---- 1) 建立用户的登录账号

---- 语法:sp_addlogin login_name,password[,defdb]

---- 其中,login_name是用户的登录名,password是用户的口令,defdb上登录的缺省数据库名称。建立数据库DatabaseName的登录账号:

sql = "EXECUTE sp_addlogin
" & username1 & ","
& password1 & "," & DatabaseName & ""
Set rs = conn.Execute(sql)

---- 2) 增加用户组
---- 语法:sp_addgroup group_name

---- 其中,group_name 是新建组名

sql = "EXECUTE sp_addgroup " & group1 & ""
Set rs = conn.Execute(sql)
---- 3) 增加用户
---- 语法:sp_adduser login_name[,name_in_db[,grpname]] 其中,login_name用户名,name_in_db是用户在当前数据库中的名字(这里是第一步建立的登录账号username1),grpname是要将用户加入的那个组的组名。

---- 在数据库DatabaseName增加用户username1:

---- sql = "EXECUTE sp_adduser " & username1 & "," & username1 & "," & group1& "" 注释:注:第一个username1是用户名,第二个username1是数据库DatabaseName的登录账号 Set rs = conn.Execute(sql)

四、分配权限

---- 语法:grant permission_list on object_name to who 其中,permission_list是所要分配的权限清单,object_name是在这个对象上的权限,who是接受授权的用户。凉山州林业局"系统需要将特殊用户建立的表授权给其他用户,所以先从系统表sysobjects得到所有的用户建立表格名(type=注释:U注释:)


sql = "select name from sysobjects where type=注释:U注释:"
Set rs = conn.Execute(sql)
---- 然后从中选取所需要的表格来分配权限给其他用户。例如,这里选择将tablename3的读取权限分配给组group1。
sql = "grant select on "
& tablename3 & " to " & group1 & ""
conn.Execute sql
---- 由于这个小工具的使用,使SQL Server数据库配置变得简单、方便了。
TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 【最具价值CTO评选秀】携程高级技术副总裁叶亚明:从呼叫中心到移动互联网的演进 为什么靠谱的公司都应该参加CTO评选? 【深度剖析】微软开源.NET:战略重心已从PC转移到云端 专访POWER 8编程挑战赛选手黄文超:非科生的编程算法之路 BDTC 2014干货精彩不断,四大全天技术论坛议题全面曝光 全功能API!开源2D游戏引擎Firmament 微信公众平台新增“微信连Wi-Fi”功能,打通线上线下闭环 马化腾:微信在一线城市活跃 QQ增长从城市到农村 承包MIPS开发!Imagination发布双Codescape MIPS SDK 不任性了!Google Play宣布开通国内开发者通道 脑洞大开!用Swift写个Material Design组件库 美国最大婚恋网站eHarmony利用Hadoop、OpenStack重构自己 每个Java开发者都应该知道的5个JDK工具 异构计算应用研讨暨OpenCL编程培训在上海和西安成功举行! APIs.io:用来发布和发现API的利器 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站 直接拿来用!十大Material Design开源项目 初探WatchKit,开发者必须知道的6件事! 【MDCC专访】环信CEO刘俊彦:音视频即时通讯将成为技术壁垒 第十七届全国工程建设计算机应用大会在京召开,AMD受邀详解GPU Computing! 哪一门开发语言薪水最高? 借助ArangoDB,带你玩转Google图算法引擎Pregel 【最具价值CTO评选秀】MediaV CTO胡宁:技术女神的自我奋斗 豌豆荚邓草原:如何实现实时响应式平台 必须谨记!Node.js安全开发技巧 聚焦新平台新应用 IBM 2014技术峰会上海站顺利落幕 《近匠》NAGA娜迦信息:移动安全加固定制化 棱镜、飞流、TalkingData三方解读:手游如何高效运营 【MDCC秀场】枕戈待旦——秉持移动开发大潮下的主角思想 请介绍几本好用的自学C语言的书籍好吗?? 紧急求救,请高手来看看 .NET和JAVA到底哪个好? 谁来救我?ISequentialStream::write()为何不好使? 定义类型的困惑 大虾们,如何做一个图标选择框!!!(详情见内) ADO编程问题求解!!!!!!!!!!! ****************简单问题,高分求救??????????????????????? 请问怎样在TabStrip中的选项卡中增加图片?谢了 工程如何能建的工整一些? www.alldas.de为什么无法访问了? 关于动态控件的问题 ADO编程问题求解 怎么编程产生1MHz甚至更高频率的周期信号? 紧急求助—有关JMail4.1附件问题 挥泪大送分!!!!! 怎样才能让自己变胖? 做个仅有对话框的应用,但想把它放到托盘, 给ASP爱好者提个建议! 关于SQLserver2000“视图“的两个问题,请教高手! 好久没上网了,送分以庆祝再回csdn!!!!! 做浏览器,如何实现 “后退”,“前进”,这二个功能? 如何使C:盘,D盘的根目录不共享? 用resin时,是否需要jdk,如何配置?分必给! SDI中的某一个子视图里怎样对主窗口的状态栏进行更改?? ◇◆◇ 失恋代表什么? ◇◆◇ 我英语不懂,想考高程.行吗 ◇◆◇ 学生生涯快完了,大家来说说对学生生涯的感受,特别是什么最深刻的! ◇◆◇ 求救!如何把SQL命令从前端应用程序传给应用程序服务器 要去招商行笔试了,有参加过的兄弟给点建议。 ###############讨论一下->微软全力推出.NET技术和C#语言的出现,VC++还有多久的寿命??? 要去招商行笔试了,有参加过的兄弟给点建议 如何发一消息,帮别人问的 高手帮助!!! 要去招商行笔试,有参加过的兄弟给点建议。 要去招商行笔试,有参加过的兄弟给点建议 我配置的IIS,为什么只能读数据库,不能写入?为什么? 我要去招商行笔试了,有参加过的兄弟给点建议。 好久没发帖了……………… 请问LINUX/UNIX下那种扩展名的文件是可执行的?DOS的。EXE对应的格式是什么? C++入门看什么书好? c++一问题 20分呀!!!!!谁有BIG5到GB的好方法!(除了用码表文件) 请介绍一下FREENET中所谓“寻找最近主机”的算法。 isapiapp的问题?如何定义一个全局变量,使后一个运行的程序不会更改前一个程序的变量 请问response.buffer = true 有什么用? 简单问题: 请教VC中的视图切换问题(急) 50分征答:如何把*.dbf文件的数据导入SQLServer2000中? Win2000下调试ASP组件 寻找资深的网络培训工程师。 设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 求证:函数f(x)有两个零点 设x1,x2是函数f(x)的两个零点,求|x设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 1.求证:函数f(x)有两个零点2.设x1,x2是函数f(x)的两个零点,求| 定义域为R的函数f(x)若关于x的方程f(x)2+bf(x)+c=0定义域为R的函数f(x)=lg|x-2|(x不等于2)1(x=2)若关于x的方程f(x)2+bf(x)+c=0有5个不同的实数解x1,x2 x3 x4 x5,则f(x1+x2+x3+x4+x5)= 已知A为实数,f(x)=a-2/(2^x+1).当f(x)是奇函数时,若方程f(x)反函数=log2(x+t)总有实数根,求 T的范围 求函数f(x)=e^x+2x+3的零点所在的区间以及零点的个数 定义域为R的偶函数f(x),当x>0时,f(x)=lnx-ax(a属于R),方程f(x)=0在R上恰有5个不同的实数解 (1)求x0时,f(x)=lnx-ax(a属于R),方程f(x)=0在R上恰有5个不同的实数解(1)求x 已知函数f(x)=〔log2^x x>0 3^x x0 3^x x 函数f(x)=xcosx^2在区间[0,4]上的零点个数为? 已知M是满足下面性质的函数f(x)的集合:在定义域内,方程f(x+1)=f(x)+f(1)有实数解(1)函数f(x)=1/x 是否属于集合M?说明理由(2)设函数f(x)=lg(t/x^2 +1),求t的取值范围 已知函数f(x)的定义域为R且对任意实数x1,x2.,总有f(x1+x2)+f(x1-x2)=2f(x1)f(x2)成立,求证:f(x)是偶函 已知函数f(x)=1/3ax^3+1/2bx^2+cx.(I)若f'(1)=-1/2a,3a>2c>2b,试问:导函数f'(x)在区间(0,2)内是否有零点,并说明理由.(II)在上面条件下,若导函数f'(x)的两个零点之间的距离不小于根号3,求b/a的取值范围 已知f(x)=10^/lgx/,若方程f(x)=b,(b是常数)有两个不同的实数根x1,x2,且x1 设函数f(x)的定义域为R,对任意实数x1,x2,总有f(x1+x2)=f(x1)+f(x2),当x>0时,f(x)>0且f(2)=31、判断f(x)的奇偶性和单调性;2、求f(x)在区间【-2,4】上的最大值和最小值;3、当θ∈【0,π/2】时, 已知定义在R上的函数f(x)=1/3ax^3+1/2bx^2+cx(a<b<c)在x=1时取得极值,且y=f(x)的图象有一点处的切线斜率为-a(1)求证:0≤b/a<1(2)若f(x)在区间(s,t)上为增函数,求证:-2 求方程sinx=lgx的实数根的个数. 函数f(x)的定义域是R,对于任意实数x1,x2,都有f(x1+x2)=f(x1)+f(x2)当x>0时,f(x)>0,且不等式f(cos2θ-3)+f(4m-2mcosθ)>0对所有θ恒成立,求实数m的取值范围 已知函数f(x)=1/3ax^3+1/2bx^2+cx(a>0).若函数f(x)有三个零点分别为x1,x2,x3,且x1+x2+x3=-3,x1x2=-9,求函数f(x)的单调区间;(2)若f'(1)=-1/2a,3a>2c>2b,证明:函数f(x)在区间(0,2)内一定有极值点;(3)在(2)的条件下,若函数 若f(x)是R上的偶函数,且方程f(x)=0有6个实数根,则这6个根的和是什么 方程x5次方+x-3=0在区间(1,2)上有几个实数点 已知函数f(x)=3ax²+2bx+c,a+b+c=0,且f(0)·f(1)>0.若x1、x2是方程f(x)=0的两个实根,求|x1-x2|的取值范围. 定义在R上的偶函数f(x)在[0,+∞)是增函数,则方程f(x)=f(2x-3)的所有实数根的和 函数f(x)=x5+x-3的实数解落在的区间是A[o,1] B[1,2] C[2,3] D[3,4](要具体解释哦) 已知函数f(x)=x3+bx2+cx+d的零点x1,x2,x3满足-2 已知方程x^2+2x+t=0的两实数根为X1,X2,若定义X1的绝对值+X2的绝对值=f(t).求函数f(t)的解析式t∈R 如果二次函数y=f(x)满足f(3+x)=f(3-x),且方程f(x)=0有两个实数根x1,x2,那么x1+x2等于?有关二次函数的问题 已知函数f(x)=│lgx│-(1/2)^x有两个零点x1,x2则有A.x1x21 D.0 已知y=f(x)是偶函数且其图像与x轴有4个交点,则方程f(x)=0的所有实数根之和是多少 若函数f(x)=sin(x+π/4),x∈[0,2π)关于x的方程f(x)=m有两个不相等的实数根x1,x2,则x1+x2= 有一列数,第一个位x1=1.第二个为x2=3,从第三个数开始依次为x3、x4、xn,从第二个数有一列数,第一个位x1=1.第二个为x2=3,从第三个数开始依次为x3、x4、xn,从第二个数开始,每个数是相邻两个数的一 已知函数f(x)=x^3+bx^2+cx+d,f(x)的三个零点x1,x2,x3分别为公差为3的等差数列{an}的前三项,f'(x)/3+3=0有唯一解(1)求数列{an}的通项公式(2)设数列{an}的前n项和为Sn,数列{Sn}的前n项和为Tn 设f(x)是定义在R上的偶函数,且当x≥0时,f(x)=x2-2x-3,讨论方程f(x)=2a-3(a∈R)的根 一列数:X1、X2、X3、.、Xn、Xn+1、.,其中X1=3 (1)如果对任意的n,有Xn+1=Xn+2 计算X2=( )一列数:X1、X2、X3、......、Xn、Xn+1、......其中X1=3(1)如果对任意的n,有Xn+1=Xn+2计算X2=( )X3=( )X4=( 设定义域为R的函数f(x)=lg/x-1/,(x不=1) 0 ,(x=1) 则使关于x的方程f^2(x)+bf(x)+c=0有5个不同实数解的条件是(A)b0 (B)b>0且c0且c=0 (D)b>=0且c=0 已知二次函数f(x)=aX2+bx+c的图象经过点(-1,0),且对一切实数x,不等式x≤f(x)≤(1+x2)/2恒成立.求f(x)的解析式注:x2是x的平方急 设X1、X2、X3……Xn是整数,并满足:(1)-1≤Xi≤2 i=1、2、.n;(2)X1+X2+……+Xn=19 (3)X1的平方+X2的平方+……+Xn的平方=99求X1的立方+X2的立方+……Xn的最大值与最小值 设定义域为R的分段函数f(x)=|lg|x-1||,x≠1;0,x=1,若关于x的方程a[f(x)]2-f(x)+1=0有8个不同的实数解求a的取值范围 若函数f(x)=x^2,则对任意实数x1,x2,下列不等式总成立的是:A.f[(x1+x2)/2]小于等于[f(x1)+f(x2)]/2B.f[(x1+x2)/2]小于[f(x1)+f(x2)]/2C.f[(x1+x2)/2]大于等于[f(x1)+f(x2)]/2D.f[(x1+x2)]/2大于[f(x1)+f(x2)]/2 已知X1,X2,X3,...Xn中每一个数值只能取-2,0,1中的一个,且满足:X1+X2+X2+...+Xn=-17,X1²+X2²+X3²+...+Xn²=37求X1³+X2³+X3³+...+Xn³的值当X=1+√2002/2时,代数式(4X³-2005X-2001)^2009的 已知函数f(x)=lg(ax^2+2ax+1)的定义域为R.则实数a属于_? 设f(x)是定义在R上的增函数,且对于任意的x都有f(2-x)+f(x)=0恒成立.如果实数m,n满足不等式组设f(x)是定义在R上的增函数,且对于任意的x都有f(2-x)+f(x)=0恒成立.如果实数m,n满足不等式组f(m^2-6m+23)+f 有一列数X1 X2 X3 .XN XN+1 X1=3 如果对任意的N 有XN+1=2XN 试着 把 XN用N表示出来 定义域为R的函数f(x)={lg|x-2|,x不等于2; 1,x=2}若关于x的方程f(x)^2+bf(x)+c=0有五个不同实根x1x2x3x4x5求f(x1+x2+x3+x4+x5)=? 设函数f(x)=ax^2+bx+1(a≠0,b∈R),若f(-1)=0,且对任意实数x(x∈R)不等式f(x) ≥0恒成立,求a,b 若一组数据X1,X2,X3,X4,…,Xn的方差为0,则表示( )A.X拔=0B.X1=X2=…=Xn=0C.X1=X2=…=XnD.无法确定 设定义在R上的函数f(x)=根号下[x2-2lxl+1],则关于x的方程f2(x)+bf(x)+c=0有八个不同实数解的充要条件是 已知函数f(x)=x2-2x-5.(1)是否存在实数m,使不等式m+f(x)>0对于任意x属于R恒成立?说明理由.(2)若存在一不等式m-f(x)>0成立,求实数m的取值范围 有一列数:X1、X2、X3……XN……其中X1等于31 如果对任意的N,有XN+1=2XN.计算X2=( ),X3=( ),X4=( ),根据上面一小题的结果,请试着把XN用N表示出来:XN=( ),计算X6=( ) 函数f(x)=(2x次方-1)的绝对值,则关于x的方程f2(x)=bf(x)+ 有3个不同实数解的充要条件是函数f2(x),则关于x的方程 有3个不同实数解的充要条件是A.-1 0 B.1>b > 0且c < 0 C.-1b≥0且c=0 f(x)是R上的函数,对于任意实数a,b,都有f(ab)=af(b)+bf(a),且f(2)=1.(1)求f(1),f(1/2)的值(2)令bn=f[2^(-n)],即2的-n次方,求证:{2^n•bn}为等差数列(3)求{bn}的通项公式 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2 设x1x2是函数f(x)的两个零点,求|X1-X2|的取值范围 已知函数y=3-(x-m)(x-n),且a,b是方程3-(x-m)(x-n)=0的两个根,则实数m,n,a,b的大小关系可能是A.m<a<b<nB.m<a<n<bC.a<m<b<nD.a<m<n<b 函数f(x)=|2^x-1|(x 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2,求证函数有两个零点 已知函数f(x)=|x^2+2x|,若关于x的方程f^2(x)+bf(x)+c=0有七个不同的解,则b,c大小关系为?答案是b 已知函数f(x)=log2(a-2-x/x-a)是奇函数,若关于x的方程f-1(x)=m2^-X实数解求m的值f-1(x)即反函数 已知函数f(x)=ax2+bx-1(a,b∈R且a>0)有两个零点,其中一个零点在区间(1,2)内,则a-b的取值范围是A(-1,1) B(-1,+~)C(-2,1)D(-2,+~)答案为B。急需过程,谢谢。 已知f(x)=lx2+2xl若关于x的方程f2(x)+bf(x)+c=0有7个不同的实数解.则b.c的大小关系为Ab>c Bb>=c与b 设函数f(x)=log2^(2^x+1)的反函数为y=f^-1(x),若关于x的方程f^-1(x)=m+f(x)在【1,2】上有解,实数m的范围 设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数.设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数. 已知函数f(x)=1/3x^3+x^2+(2a-1)x+a^2-a+1,若f'(x)=0在(1,3】上有解,则实数a的范围 已知a为实数,f(x)=a-2/(2^x+1)(x为R) 当f(x)是奇函数时,若方程f(x)的反函数=log2(x+t)总有实数根,求实数t的取值范围.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn