像在带有SMO的Asp.net中一样构建通用页面“查询分析器”

时间:2010-03-26 21:59:41

标签: asp.net smo

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

我正在使用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的语句)和任何返回结果集的select命令,就像查询分析器一样。

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

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

有谁知道如何同时执行相同的命令文本?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须编写代码以拆分命令,并能够识别一个命令结束而另一个命令开始的位置。无论哪种方式,这都不是一项简单的任务。

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

说到取决于用户,我只需要问一下,只有您或其他受信任的人会使用它吗?还有什么东西不指向有价值的数据?我只是因为当我还是一名年轻的程序员并且不知道更好的时候,我为一个任务关键型数据库构建了这样一个工具,现在我生活在恐惧中,有人会做一些像哑巴一样的事情

Delete From MyMissionCriticalTable

然后我会花谁知道修复它的时间......

我不知道你的经验水平,所以我不是故意要侮辱我敦促你考虑你应该这样做,然后再过分担心你能做到这一点。