设为首页 加入收藏

TOP

ASP.NET调用.sql文件(二)
2013-09-28 14:08:08 来源: 作者: 【 】 浏览:230
Tags:ASP.NET 调用 .sql 文件

  笔者前一阵子发表了一篇《ASP.NET调用.sql文件》文章,主要是是解决数据库配置,减去传统手工附加数据库和自己改写web.config文件等等这些复杂的过程,而是配置的向导。其中给出关键的技术知识点,就是通过sql数据库生成数据库脚本即.sql文件,然后通过调用osql.exe来执行.sql文件。

  这里,园友首先质疑了其安全性,认为程序存在被他人利用的危险。笔者对这方面没有太多经验,希望来位高人讲讲这方面的知识或者演示被利用的过程。所以这块还是一个未知的领域,笔者也不敢保证绝对安全,但是至少目前来没有提出具体的实例来说有危险。

  其次园友提出了本机器上没有数据库的可能性,即程序在一台服务器,数据库在另外一台数据库服务器上,确实如果没有数据库那么上篇文章提到方法就落空了。但是笔者认为这种可能性比较小,因为这种可能性只有说明程序非常大,而且应该是定制软件团队亲自派人过去配置。

  然后笔者在后来调试程序发现,按上篇文章配置数据库发现缺失部分存储过程。笔者的数据库里内容大致分为(数据表,函数,视图,存储过程,数据)这5个部分,由于存储过程很多所以开始没有发现。细致找下原因发现存储过程中部分程序代码里包含中文字符,而调用osql.exe其实就是在cmd控制台里执行,cmd不支持中文,所以造成部分存储过程丢失。期间当然上网查找解决方法,首先想到的是通过来转换编码方式,经过调试发现不能解决。

  所以最后解决方法只有两种:第一将中文字符转换为英文字符,这点不可能。第一中文字符比较多,这里数据与程序对应,这里修改意味着程序里也要对应的修改,工作量比较大。那么第二种就是通过程序来向sql里建立(函数,视图,存储过程)。例如:存储过程是数据库里倒出来的。具体格式为

代码
USE[magazinedb]
GO
/****** Object: StoredProcedure [dbo].[Update_MagazineInformation_HZJ] Script Date: 11/25/2010 10:25:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--更新杂志信息
createprocedure[dbo].[Update_MagazineInformation_HZJ]
(
@TabNamevarchar(20),
@TypeIDdecimal,
@TypeNamevarchar(20),
@TypeRemarkvarchar(100),
@TypeDatedatetime
)
as
begin
exec('
update
'+@TabName+' set [name]='''+@TypeName+''',Remark='''+@TypeRemark+''',Date='''+@TypeDate+'''
where ID=
'''+@TypeID+'''
')
end
GO
/****** Object: StoredProcedure [dbo].[UP_UserLogin_userPwd_LX] Script Date: 11/25/2010 10:25:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATEPROCEDURE[dbo].[UP_UserLogin_userPwd_LX]
@loginIdDECIMAL,
@oldUserPwdVARCHAR(60),
@newUserPwdVARCHAR(60),
@resultINT OUTPUT
AS
BEGIN
DECLARE@pwdVARCHAR(60)
SELECT@pwd= userPwd FROM magazineDB..UserLogin WHERE loginId =@loginId
IF@pwd<>@oldUserPwd
SET@result=0
ELSE
BEGIN
UPDATE magazineDB..UserLogin SET userPwd =@newUserPwdWHERE loginId =@loginId
SET@result=1
END
END
GO
/****** Object: StoredProcedure [dbo].[UP_UserLogin_SeekPwd_GW] Script Date: 11/25/2010 10:25:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
createPROCEDURE[dbo].[UP_UserLogin_SeekPwd_GW]
@loginIdDECIMAL,
@newUserPwdVARCHAR(60)
AS
BEGIN
UPDATE magazineDB..UserLogin SET userPwd =@newUserPwdWHERE loginId =@loginId
END
GO
/****** Object: StoredProcedure [dbo].[UP_user_readState_LX] Script Date: 11/25/2010 10:25:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATEPROCEDURE[dbo].[UP_user_readState_LX]
@userIDDECIMAL,
@readStateVARCHAR(20)
AS
BEGIN
UPDATE magazineDB..[user]SET readState =@readStateWHERE userID =@userID
END
GO
。。。
。。。

 首先Go是在程序里运行会报错误的,首先需要替换掉,然后运行会报出 Create需要放首行,好多变量未定义的等错误,如果单独执行一个下面的存储过程是没有问题的,但是里面内容有两个就会报错,所以这里想出用编程(www.cppentry.com)的方式来一个个读取其中一个存储过程来执行,然后执行下一条

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.2 数据类型 下一篇使用fat-jar打包多个java工程为可..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: