Server Mgt Studio에서 실행할 때 원하는 결과를 정확히 반환하는 복잡한 SQL 쿼리는 아니지만 C#으로 실행할 때 DataGrid가 비어 있습니다. (예 - 호스트 이름을 살균 처리했기 때문에 나는 끔찍한 명명 체계가있는 것만은 아닙니다.)SQL 쿼리는 작동하지만 동일한 C# 쿼리는 작동하지 않습니다. .
나보다 더 선명한 눈을 가진 사람이 문제를 선택할 수 있기를 바랍니다.
SQL 쿼리 :
SELECT MachineName, InstanceName, CounterName,
AVG(CASE WHEN CounterValue > 0 THENCounterValue ELSE NULL END)/1024 as 'Mean (KB)'
FROM DataCollector.dbo.JobCounterSummary
WHERE
((MachineName = '\\HOST001' AND (InstanceName = 'D:' OR InstanceName = 'E:')) OR
(MachineName = '\\HOST002' AND (InstanceName = 'E:' OR InstanceName = 'G:')) OR
(MachineName = '\\HOST003' AND (InstanceName = 'G:' OR InstanceName = 'H:')) OR
(MachineName = '\\HOST004' AND (InstanceName = 'G:' OR InstanceName = 'H:') OR
(MachineName = '\\HOST005' AND InstanceName = 'G:') OR
(MachineName = '\\HOST006' AND InstanceName = 'C:') OR
(MachineName = '\\HOST007' AND InstanceName = 'C:'))) AND
InstanceName != '_Total' AND
InstanceName NOT LIKE 'Harddisk%' AND
(CounterName = 'Avg. Disk Bytes/Write' OR CounterName = 'Avg. Disk Bytes/Read')
GROUP BY MachineName, CounterName, InstanceName
ORDER BY MachineName, InstanceName, CounterName
그리고 C# 코드 :
public DataTable dtJobReadWrite = new DataTable();
private void GetReadWriteStats()
{
dtJobReadWrite.Clear();
string connstr = @"Server=SQLSERVER\SQL;Database=DataCollector;Trusted_Connection=True; MultipleActiveResultSets=true";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
string commandstr =
"SELECT MachineName, InstanceName, CounterName, AVG(CASE WHEN CounterValue > 0 THEN CounterValue ELSE NULL END)/1024 as \"Mean (KB)\" " +
"FROM dbo.JobCounterSummary " +
"WHERE " +
"((MachineName = @HOST001 AND (InstanceName = @DriveD OR InstanceName = @DriveE)) OR " +
"(MachineName = @HOST002 AND (InstanceName = @DriveE OR InstanceName = @DriveG)) OR " +
"(MachineName = @HOST003 AND (InstanceName = @DriveG OR InstanceName = @DriveH)) OR " +
"(MachineName = @HOST004 AND (InstanceName = @DriveG OR InstanceName = @DriveH) OR " +
"(MachineName = @HOST005 AND InstanceName = @DriveG) OR " +
"(MachineName = @HOST006 AND InstanceName = @DriveC) OR " +
"(MachineName = @HOST007 AND InstanceName = @DriveC))) AND " +
"InstanceName != @_Total AND " +
"InstanceName NOT LIKE @HardDisk AND " +
"(CounterName = @AvgDiskBytesWrite OR CounterName = @AvgDiskBytesRead) " +
"GROUP BY MachineName, CounterName, InstanceName " +
"ORDER BY MachineName, InstanceName, CounterName";
SqlCommand jobsCommand = new SqlCommand(commandstr, conn);
jobsCommand.Parameters.AddWithValue("@HOST001", "\\HOST001");
jobsCommand.Parameters.AddWithValue("@HOST002", "\\HOST002");
jobsCommand.Parameters.AddWithValue("@HOST003", "\\HOST003");
jobsCommand.Parameters.AddWithValue("@HOST004", "\\HOST004");
jobsCommand.Parameters.AddWithValue("@HOST005", "\\HOST005");
jobsCommand.Parameters.AddWithValue("@HOST006", "\\HOST006");
jobsCommand.Parameters.AddWithValue("@HOST007", "\\HOST007");
jobsCommand.Parameters.AddWithValue("@DriveC", "C:");
jobsCommand.Parameters.AddWithValue("@DriveD", "D:");
jobsCommand.Parameters.AddWithValue("@DriveE", "E:");
jobsCommand.Parameters.AddWithValue("@DriveG", "G:");
jobsCommand.Parameters.AddWithValue("@DriveH", "H:");
jobsCommand.Parameters.AddWithValue("@_Total", "_Total");
jobsCommand.Parameters.AddWithValue("@HardDisk", "Harddisk%");
jobsCommand.Parameters.AddWithValue("@AvgDiskBytesWrite", "Avg. Disk Bytes/Write");
jobsCommand.Parameters.AddWithValue("@AvgDiskBytesRead", "Avg. Disk Bytes/Read");
SqlDataAdapter jobsAdapter = new SqlDataAdapter(jobsCommand);
jobsAdapter.Fill(dtJobReadWrite);
dgvReadWrites.DataSource = dtJobReadWrite;
conn.Close();
}
예! 이것이 월요일 아침에 코딩해서는 안되는 이유입니다. –
저에게는 금요일 오후입니다. 점심 식사 후 금요일에 아무것도 쓰지 않으면 보통 월요일 아침에 다시해야합니다. –