Bigprey Ответов: 1

Привязка данных: 'system.data.datarowview' не содержит свойства с именем 'sports'.


У меня есть зашифрованный чат через asp.net в C# &амп; мѕ SQL. У меня есть два выпадающих списка для выбора видов спорта, а затем еще один для сортировки чатов на основе пользователей онлайн/всего пользователей.

Когда я выбираю "все виды спорта "(значение по умолчанию) и" пользователи онлайн", запрос работает нормально.
Но когда я выбираю "все виды спорта "(значение по умолчанию) и" всего пользователей", запрос выдает некоторую ошибку.

"SELECT roo.[Sports] As Sport, roo.[Name] AS ChatRoomName, COUNT(DISTINCT liu.[LoggedInUserID]) AS OnlineUsers, COUNT(DISTINCT chu.ChatUserLogId) AS TotalUsers FROM Room AS roo LEFT JOIN LoggedInUser AS liu ON roo.RoomID = liu.RoomID LEFT JOIN ChatUserLog AS chu ON roo.RoomID = chu.RoomID AND chu.LoggedInTime >= DATEADD(DAY,-30,GETDATE()) GROUP BY roo.[Sports], roo.[Name]";


Результаты должны быть такими

                   Chatroom Name      Online users              Total Users
Football 
              Best football player ever?    0                       5671
              Messi or Ronaldo?             5                       346
              Who'll win EURO this year?    0                       134
Swimming 
              Best ever Swimmer?            0                       3343
              Phelps or Spitz?              0                       1056
              Lochte or Phelps for gold?    0                       45
              
Tennis
              Serena or Steffi graf?        0                       432
              Federer or Djokovic?          0                       298
              Best server ever?             0                       43


Мои результаты не сортируются должным образом, а также виды спорта, имеющие онлайн-пользователей, тоже показываются дважды.

CREATE TABLE [dbo].[ChatUserLog] (
    [ChatUserLogId] BIGINT   IDENTITY (1, 1) NOT NULL,
    [MId]           INT      NOT NULL,
    [RoomId]        INT      NOT NULL,
    [LoggedInTime]  DATETIME DEFAULT (getdate()) NOT NULL,
    [LogOutTime]    DATETIME DEFAULT (getdate()) NULL,
    PRIMARY KEY CLUSTERED ([ChatUserLogId] ASC)
);
 
CREATE TABLE [dbo].[LoggedInUser] (
    [LoggedInUserID] INT           IDENTITY (1, 1) NOT NULL,
    [MId]            INT           NOT NULL,
    [RoomID]         INT           NOT NULL,
    [NickName]       VARCHAR (50)  NOT NULL,
    [Icon]           VARCHAR (MAX) NOT NULL,
    CONSTRAINT [PK_LoggedInUser] PRIMARY KEY CLUSTERED ([LoggedInUserID] ASC)
);


CREATE TABLE [dbo].[Message] (
    [MessageID] INT           IDENTITY (1, 1) NOT NULL,
    [RoomID]    INT           NOT NULL,
    [MId]       INT           NOT NULL,
    [ToUserID]  INT           NULL,
    [Text]      VARCHAR (MAX) NOT NULL,
    [TimeStamp] DATETIME      DEFAULT (getdate()) NOT NULL,
    [Color]     VARCHAR (50)  NULL,
    [NickName]  VARCHAR (50)  NOT NULL,
    [Icon]      VARCHAR (MAX) NOT NULL,
    PRIMARY KEY CLUSTERED ([MessageID] ASC)
);
 
CREATE TABLE [dbo].[Room] (
    [RoomID]        INT           IDENTITY (6666, 1) NOT NULL,
    [Name]          VARCHAR (100) NOT NULL,
    [Sports]        VARCHAR (50)  NOT NULL,
    [CreatedDate]   DATETIME      DEFAULT (getdate()) NOT NULL,
    [CreatedBy]     VARCHAR (50)  NOT NULL,
    [CreatedUserID] INT           NOT NULL,
    PRIMARY KEY CLUSTERED ([RoomID] ASC)
);


Спасибо заранее и иметь хороший день впереди.

Что я уже пробовал:

Я пытаюсь

"SELECT roo.[Sports] As Sport, roo.[Name] AS ChatRoomName, COUNT(DISTINCT liu.[LoggedInUserID]) AS OnlineUsers, COUNT(DISTINCT chu.ChatUserLogId) AS TotalUsers FROM Room AS roo LEFT JOIN LoggedInUser AS liu ON roo.RoomID = liu.RoomID LEFT JOIN ChatUserLog AS chu ON roo.RoomID = chu.RoomID AND chu.LoggedInTime >= DATEADD(DAY,-30,GETDATE()) GROUP BY roo.[Sports], roo.[Name]";

Suvendu Shekhar Giri

Это, наверное, уже 4-й или 5-й раз, когда я вижу подобный вопрос от вас?
Просто хочу знать, если это тот же самый вопрос?
Если нет, то чем он отличается от других?
Почему бы не обновить тот же вопрос?

Bigprey

Это совсем другое... Если бы вы могли прочитать или сравнить его с 1-м, вы бы уже знали его.

Я пытаюсь опубликовать этот другой вопрос уже 2-3 раза и был удален... Вот почему я поместил саму ошибку в качестве названия здесь... Пожалуйста, поймите и позвольте этому случиться.

Suvendu Shekhar Giri

ладно. :)

1 Ответов

Рейтинг:
2

Suvendu Shekhar Giri

Судя по ошибке, вы пытаетесь получить доступ к значению в приложении из datarowview, где хранится результат общего запроса, но с неправильным ключом.

SELECT roo.[Sports] As Sport,...
...
]
Колонна такая Спорт но похоже, что вы пытаетесь получить доступ с помощью Виды спорта и это, вероятно, является причиной ошибки.
Посмотрите на соответствующий код и попробуйте удалить последний "с" от "Спортивный".

Надеюсь, это поможет :)
Пожалуйста, дайте мне знать, если я упускаю здесь что-то очевидное.


Bigprey

Но разве колонка "спорт" не создана в комнате стола?

Создайте таблицу [dbo].[Комната] (
[RoomID] INT IDENTITY (6666, 1) NOT NULL,
[Имя] VARCHAR (100) NOT NULL,
[Спортивный] VARCHAR (50) NOT NULL,
[CreatedDate] DATETIME DEFAULT (getdate()) НЕ НУЛЕВОЙ,
[CreatedBy] VARCHAR (50) NOT NULL,
[CreatedUserID] INT NOT NULL,
Кластеризованный первичный ключ ([RoomID] ASC)
);

Спасибо заранее и иметь хороший день впереди.

Suvendu Shekhar Giri

Правда. Но вы меняете псевдоним колонки Спорт на спорт

SELECT roo.[Sports] As Sport..

таким образом, Вы сможете получить доступ к нему через Sport

Bigprey

Итак, мне нужно изменить Спорт на спорт в Select (Aliasing) части или в Group BY part в конце? Спасибо

Suvendu Shekhar Giri

Просто удалите псевдоним в запросе select и проверьте

SELECT roo.[Sports], roo.[Name] AS ChatRoomName....

Bigprey

И придется удалить псевдоним "ChatRoomName" также и для roo.[Имя], верно? Он используется в последний момент.

Еще одно сомнение. Разве я не должен использовать ISNULL для подсчета, так как у него тоже больше шансов быть равным 0?

Спасибо

Suvendu Shekhar Giri

Нулевые значения игнорируются AGGREGATE FUNCTIONS

Bigprey

Для исправленного запроса

Выбрать различные РОО.[Спорт], ру.[Имя], Граф (отчетливый Чу.ChatUserLogId) как TotalUsers, COUNT (DISTINCT liu.[LoggedInUserID]) как UserOnline

Из комнаты как ру

Слева присоединяйтесь к LoggedInUser как Лю на ру.RoomID = Лю.RoomID
Слева присоединяйтесь к ChatUserLog как chu ON roo.RoomID = Чу.Румид и Чу.LoggedInTime >= DATEADD(день, -30, GETDATE())

Группа по ру.[Спортивный]

Заказ по TotalUsers DESC";

Я получаю, скажем, баскетбол, повторенный n раз для n имен комнат, и футбол, повторенный m раз для m имен комнат в футбольной категории.

Какие ошибки я здесь совершил?