У меня есть следующий код, который кажется довольно стандартным по номинальной стоимости, однако в запросе есть еще один оператор SQL, поэтому «AS QUERY» находится в конце строки SQL. Я хотел знать, существует ли сложный подход к параметризации следующей команды SQL вместо объединения всего запроса вместе.
Единственное решение, которое я мог бы придумать, состоит в том, чтобы вместо запроса в виде строки иметь его как объект типа SQLCommand
и инициировать 2 команды. От 1 до может, а другой - для предварительного просмотра данных.
public static CommandStatus<int> GetQueryRecordCount(SqlConnection connection, String query)
{
String sql = "SELECT COUNT(1) FROM (" + query + ") AS QUERY";
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = connection;
cmd.CommandTimeout = GetTimeout();
try
{
SqlDataReader dataReader = cmd.ExecuteReader();
dataReader.Read();
String count = dataReader[0].ToString();
dataReader.Close();
return new CommandStatus<int>(Int32.Parse(count));
}
catch (Exception e)
{
return new CommandStatus<int>("Failed to GetQueryRecordCount[" + sql + "]:" + e.Message, e);
}
}
Строка SQL в конечном итоге будет выглядеть примерно так
"SELECT COUNT(1) FROM (SELECT TOP 20 [RecordID],[Name],[SonsName],[DadsName],[MothersName],[DaughtersName] FROM [dbo].[sample] ) AS QUERY"