JamesS и Yaman уже рассмотрели фундаментальную проблему, но: в качестве общего совета, если вы собираетесь иметь SQL в C#, дословных строковых литералах (@"..."
) избегайте почти все проблемы с пробелами:
const string query = @"
select top 1 *
from dbo.RadarMF30_log
where SYSTEM_ID = @id
order by Log_writing_time desc";
(примечание: это не обязательно должно быть const
- просто ... здесь также не нужно, чтобы оно было переменной)
В качестве примечания: это тот тип сценария, который также очень хорошо работает с такими инструментами, как «Dapper», чтобы вообще не связываться с ADO. NET вообще:
var model = conn.QuerySingle<LogModel>(@"
select top 1 *
from dbo.RadarMF30_log
where SYSTEM_ID = @id
order by Log_writing_time desc", new { id = systemId });
Больше не надо связываться с нюансы команд и параметров, или беспокойство о том, закрыли ли вы соединение слишком рано (посмотрите внимательно: вы закрыли соединение слишком рано).
В качестве примечания: вы также можете захотеть чтобы избежать select *
- это может вызвать два разных типа проблем:
- , возвращающих множество больших столбцов (CLOB / BLOB и c), которые вам не нужны, влияющих на производительность
- иногда, просто иногда, столбцы не в том порядке, в котором вы указали т; если вы связываете порядковым (
GetString(0)
et c в вашем коде), это может иметь огромное влияние; обратите внимание, что «Dapper» связывается по name , так что здесь это не такая большая проблема (при условии, что имена достаточно хорошо совпадают, чтобы библиотека поняла, что вы имели в виду)