2010-03-26 28 views
0

我在ASP.net中构建一个网页应该像查询分析器一样工作。它基本上有一个textarea来输入sql命令和一个Execute按钮。构建一个通用页面“查询分析器”就像在Asp.net与SMO

我使用SMO在数据库中执行命令,如下所示:

//Create object SMO 
Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new Microsoft.SqlServer.Management.Common.ServerConnection(oConn)); 

//To execute the command 
server.ConnectionContext.ExecuteNonQuery(tbx_cmd.Text); 
//OR 
myDataset = server.ConnectionContext.ExecuteWithResults(tbx_cmd.Text); 

的问题是,textarea的命令可以包含任何东西,从一个存储过程(与GO的语句)和任何选择命令返回结果集,就像查询分析器一样。

但是,如果我有GO语句,我只能使用ExecuteNonQuery方法执行查询。如果我使用ExecuteWithResults方法,则会由于GO语句而引发错误。

如果我想让结果集可用,当然我只能使用ExecuteWithResults方法。

有谁知道我该怎么做才能同时执行相同的命令文本?

谢谢!

回答

0

您将不得不编写代码来拆分命令,并能够识别一个命令结束和另一个命令开始的位置。无论哪种方式,这不是一个简单的任务。

您可以制定一条规则,在您的应用程序中,所有SQL命令以分号结尾,然后使用string.split()将其拆分为多个字符串,并将每个字符串视为命令。当然,这将取决于正确使用它的用户。

说到取决于用户,我只能问,这是只有你或另一个可信任的人会使用它的东西吗?还有一些不指向有价值的数据?我只问,因为当我还是一个年轻的程序员并且不知道任何更好的时候,我为一个任务关键型数据库建立了这样的工具,现在我生活在恐惧之中,有人会做一些愚蠢的事情,如

Delete From MyMissionCriticalTable 

,然后我会花谁知道多久固定它...

我没有你的经验水平的想法,所以我的意思并不是要侮辱时,我劝你要考虑你应该这样做在你担心得太多之前,你可以这样做。