2010-06-15 5 views
0

Я использую следующую функцию для создания списка пользователей, подключенных к выбранной базе данных. Как я могу изменить это на одну строку для нескольких одинаковых результатов? Например: «sa (3) - MYCOMPUTER», а не «sa - MYCOMPUTER» три раза?Выход форматирования данных чтения

Function ConnectedUsers(ByVal SelectedDatabase As String, ByVal SelectedInstance As String) 
    Dim myCommand As SqlCommand 
    Dim dr As SqlDataReader 
    Dim mystring As String = String.Empty 
    Try 
     Dim myConn As New SqlConnection(ConnectionString) 
     myConn.Open() 
     myCommand = New SqlCommand("select loginame,hostname from sysprocesses where db_name(dbid) = '" & SelectedDatabase & ";", myConn) 
     dr = myCommand.ExecuteReader() 
     While dr.Read() 
         mystring += GetFullName(dr(0).ToString().Trim()) & " - " & dr(1).Trim() & vbCrLf 
     End While 
     dr.Close() 
     myConn.Close() 
    Catch e As Exception 
     MessageBox.Show(e.Message) 
    End Try 
    Return mystring 
End Function 

Thanks.

ответ

0

SQL-команды должны быть

select loginame, count(*) as Nbr, hostname from sysprocesses where db_name(dbid) = '" & SelectedDatabase & "' group by loginame;" 

и вы должны изменить дисплей для отображения счетчика (НБР в этом примере), чтобы быть что-то вроде:

mystring += GetFullName(dr(0).ToString().Trim()) & "(" & dr(1).Trim() & ") - " & dr(2).Trim() & vbCrLf 
+0

Благодаря MJB, я вижу - сделать счет как часть оператора sql, а не по возвращенным результатам. является синтаксисом, правильным для утверждения? Я получаю «Столбец sysprocesses.hostname» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY ». – madlan

+0

Я не думаю, что при использовании Count можно возвращать более одного столбца? – madlan

+0

SELECT loginame, hostname, COUNT (loginame) AS Nbr из sysprocesses, где db_name (dbid) = '"& SelectedDatabase &"' GROUP BY loginame, hostname; – madlan

Смежные вопросы