我在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 方法。
有谁知道如何同时执行相同的命令文本?
谢谢!
答案 0 :(得分:0)
您必须编写代码以拆分命令,并能够识别一个命令结束而另一个命令开始的位置。无论哪种方式,这都不是一项简单的任务。
你可以制定一个规则,在你的应用程序中,所有SQL命令都以分号结尾,然后使用string.split()将其拆分为多个字符串,并将每个命令视为一个命令。当然,这将取决于正确使用此功能的用户。
说到取决于用户,我只需要问一下,只有您或其他受信任的人会使用它吗?还有什么东西不指向有价值的数据?我只是因为当我还是一名年轻的程序员并且不知道更好的时候,我为一个任务关键型数据库构建了这样一个工具,现在我生活在恐惧中,有人会做一些像哑巴一样的事情
Delete From MyMissionCriticalTable
然后我会花谁知道修复它的时间......
我不知道你的经验水平,所以我不是故意要侮辱我敦促你考虑你应该这样做,然后再过分担心你能做到这一点。