Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以测试SQL语句,看看它是否可以在C#中执行?_C#_Sql_Sql Server_Entity Framework_Ado.net - Fatal编程技术网

有没有一种方法可以测试SQL语句,看看它是否可以在C#中执行?

有没有一种方法可以测试SQL语句,看看它是否可以在C#中执行?,c#,sql,sql-server,entity-framework,ado.net,C#,Sql,Sql Server,Entity Framework,Ado.net,我不是要求通过解析SQL语句来测试它 我的意思是类似于用ADO.NET执行SQL语句,因此它实际上会在SQL Server中运行,以查看字段名是否正确、表名是否正确、stynxs是否正确、数据类型是否正确等等 以前的开发人员通过使用ADO.NET执行SQL语句并检查是否为抛出执行选项来完成此操作。但是数据返回是一个庞大的数据集,这是在浪费资源。那么,我是否可以要求SQL Server在C#?中为我执行语句检查?请尝试启用SET PARSEONLY PARSEONLY的问题是,它只检查语法结构。它

我不是要求通过解析SQL语句来测试它

我的意思是类似于用ADO.NET执行SQL语句,因此它实际上会在SQL Server中运行,以查看字段名是否正确、表名是否正确、stynxs是否正确、数据类型是否正确等等


以前的开发人员通过使用ADO.NET执行SQL语句并检查是否为抛出执行选项来完成此操作。但是数据返回是一个庞大的数据集,这是在浪费资源。那么,我是否可以要求SQL Server在C#?

中为我执行语句检查?请尝试启用SET PARSEONLY

PARSEONLY的问题是,它只检查语法结构。它不解析表名和列名。所以

SET PARSEONLY ON
GO
SELECT nocolumn FROM no.notable;
GO
SET PARSEONLY OFF
运行没有错误

没有干净的方法可以实现您想要的目标,但您可以尝试ROWCOUNT设置:

SET ROWCOUNT 1;

BEGIN TRAN
SELECT * FROM sys.objects;-- Your statement
ROLLBACK

SET ROWCOUNT 0;
ROWCOUNT设置在达到n行后停止执行。显式事务确保不会对该数据库应用任何更改。您还可以从C#代码控制事务


这并不理想的原因是,有些操作要求SQLServer在返回一行之前完成所有工作。ORDER BY子句就是一个例子。

我假设您要检查的是SELECT语句。如果是这样,你不能用SELECT TOP 1而不是SELECT来运行查询,这样它只返回一行吗?@Moonshield SELECT语句是用户定义的,我不能确保他输入的正确。如果必须执行TOP 1,则需要使用regexp检查并修改输入的SQL语句,使其具有TOP 1。@Moonshield和其他语句,我认为如果选择TOP 0而不是TOP 1,效果会更好。使用
将NOEXEC设置为ON
是否会更好?userx是正确的,如果要验证表名和列名,NOEXEC是正确的选择。