Cemi Skrevet 30. april 2011 Del Skrevet 30. april 2011 (endret) Og der var også siste spørsmål løst, løsningen var å fjerne auto genererte Collate statements i oppretningen av tabeller i Scriptet visual studio laget for å lage databasen. __________________________ Da det har blitt en del nye spørsmål, og løsninger, så har jeg lagt første innlegg i spoiler, og setter siste edit inn her slik at man skal slippe å lese igjennom Vi har nå løst den saken, av ukjent grunn begynte den å fungere når vi endret fra Forms Authentication til Windows Authentication og tilbake igjen. Selv om det ikke gir noen mening, så funker det ihvertfall. Nå er det derimot problemer med to stored procedures i Databasen. Koden under gir feilmeldingen Msg 468, Level 16, State 9, Line number 53 Cannot resolve the collation conflict between "Danish_Norwegian_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. og samme med Line Number 58, 87 og 92. Det er ikke noe spesielt på disse linjene, de er henholdsvis: SELECT RoleId IF (@CountR <> @Num) SELECT UserId IF (@CountU <> @Num) Ser jo ut som om det er noe mønster i det, men notasjonen <> brukes jo andre plasser, og select staments ser jeg heller ikke noe problem i. For denne erroren på en omtrent identisk kodeblokk som lager prosedyren AddUserToRole. I denne er det linjene SELECT RoleId IF (@@ROWCOUNT <> @Num) SELECT UserId IF (@@ROWCOUNT <> @Num) SELECT UserId Som gir samme feil. Skjønner ikke hvorfor, og Google er lite hjelpsom på denne også. Noen som har noen idé? Koden som gir feilmelding. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[aspnet_UsersInRoles_RemoveUsersFromRoles]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[aspnet_UsersInRoles_RemoveUsersFromRoles] @ApplicationName nvarchar(256), @UserNames nvarchar(4000), @RoleNames nvarchar(4000) AS BEGIN DECLARE @AppId uniqueidentifier SELECT @AppId = NULL SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName IF (@AppId IS NULL) RETURN(2) DECLARE @TranStarted bit SET @TranStarted = 0 IF( @@TRANCOUNT = 0 ) BEGIN BEGIN TRANSACTION SET @TranStarted = 1 END DECLARE @tbNames table(Name nvarchar(256) NOT NULL PRIMARY KEY) DECLARE @tbRoles table(RoleId uniqueidentifier NOT NULL PRIMARY KEY) DECLARE @tbUsers table(UserId uniqueidentifier NOT NULL PRIMARY KEY) DECLARE @Num int DECLARE @Pos int DECLARE @NextPos int DECLARE @Name nvarchar(256) DECLARE @CountAll int DECLARE @CountU int DECLARE @CountR int SET @Num = 0 SET @Pos = 1 WHILE(@Pos <= LEN(@RoleNames)) BEGIN SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos) IF (@NextPos = 0 OR @NextPos IS NULL) SELECT @NextPos = LEN(@RoleNames) + 1 SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos - @Pos))) SELECT @Pos = @NextPos+1 INSERT INTO @tbNames VALUES (@Name) SET @Num = @Num + 1 END INSERT INTO @tbRoles SELECT RoleId FROM dbo.aspnet_Roles ar, @tbNames t WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppId SELECT @CountR = @@ROWCOUNT IF (@CountR <> @Num) BEGIN SELECT TOP 1 N'''', Name FROM @tbNames WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(2) END DELETE FROM @tbNames WHERE 1=1 SET @Num = 0 SET @Pos = 1 WHILE(@Pos <= LEN(@UserNames)) BEGIN SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos) IF (@NextPos = 0 OR @NextPos IS NULL) SELECT @NextPos = LEN(@UserNames) + 1 SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos))) SELECT @Pos = @NextPos+1 INSERT INTO @tbNames VALUES (@Name) SET @Num = @Num + 1 END INSERT INTO @tbUsers SELECT UserId FROM dbo.aspnet_Users ar, @tbNames t WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppId SELECT @CountU = @@ROWCOUNT IF (@CountU <> @Num) BEGIN SELECT TOP 1 Name, N'''' FROM @tbNames WHERE LOWER(Name) NOT IN (SELECT au.LoweredUserName FROM dbo.aspnet_Users au, @tbUsers u WHERE u.UserId = au.UserId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(1) END SELECT @CountAll = COUNT(*) FROM dbo.aspnet_UsersInRoles ur, @tbUsers u, @tbRoles r WHERE ur.UserId = u.UserId AND ur.RoleId = r.RoleId IF (@CountAll <> @CountU * @CountR) BEGIN SELECT TOP 1 UserName, RoleName FROM @tbUsers tu, @tbRoles tr, dbo.aspnet_Users u, dbo.aspnet_Roles r WHERE u.UserId = tu.UserId AND r.RoleId = tr.RoleId AND tu.UserId NOT IN (SELECT ur.UserId FROM dbo.aspnet_UsersInRoles ur WHERE ur.RoleId = tr.RoleId) AND tr.RoleId NOT IN (SELECT ur.RoleId FROM dbo.aspnet_UsersInRoles ur WHERE ur.UserId = tu.UserId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(3) END DELETE FROM dbo.aspnet_UsersInRoles WHERE UserId IN (SELECT UserId FROM @tbUsers) AND RoleId IN (SELECT RoleId FROM @tbRoles) IF( @TranStarted = 1 ) COMMIT TRANSACTION RETURN(0) END ' END Første innlegg: Hei! Da vi nærmer oss en fungerende versjon av vårt skole prosjekt innen ASP.NET så vil vi prøve å få det opp på nett for å kjøre, slik at vi kan teste hvordan det vil fungere dersom flere brukere er inne samtidig. Vårt prosjekt bruker to databaser: ASPNETDB.mdf - Microsoft sin standard database som ble generert for login system. Database1.mdf - Vår database med våre tabeller og informasjonen vi bruker. Og en Entitets modell som vi bruker for LINQ to Entities. Database1Model - Altså, modell av Database1. Vi har da fått publisert nettsiden, og generert databasene på serveren. De fungerer derimot ikke, og jeg antar at dette muligens har noe å gjøre med connection strings? Finner særdeles lite informasjon om hvordan vi publiserer, da spesielt Microsoft sin standard login database som ikke har en connection string i Web.Config filen. Er det noen som har noe informasjon om hva vi må gjøre videre for å få dette til å funke? Evt. en link til en side som sier noe om hvordan vi knytter siden opp mot databasene på webserveren? Har vært i kontakt med support hos Hosten, da jeg håpte de visste noe om connection string. Fikk da beskjed om å sende en ticket til Tech Support, og at det kunne ta litt tid, så håper muligens noen her kan noe. På forhånd takk Endret 30. april 2011 av Cemi Lenke til kommentar
Cemi Skrevet 30. april 2011 Forfatter Del Skrevet 30. april 2011 (endret) Har nå funnet ut av ConnectionStringen til Databasen. Endret ConnectionStringen fra "Classic ASP" som den ble auto generert av Visual Studio til "ASP.NET" stil, i følge en eller annen nettside, så fungerer dem. Problemet er nå hvordan vi bruker Microsoft sin default Login Database på en webserver? Kan ikke finne noen plass å endre connectionString for den? __________________________________ Edit: Ang ASPNETDB databasen. Har da funnet ut at man kan hente ut den connectionStringen fra Machine.Config filen, og så legge til denne connectionstringen i Web.Config ved hjelp av å først fjerne den som var der, og legge til en ny med samme navn. Får derimot nå error meldingen "Login failed. The login is from an untrusted domain and cannot be used with Windows authentication." Når jeg prøver å logge meg på på nettsiden, eller fra databasen på nettsiden. Dersom noen har noe kjennskap til denne feilen så setter vi enda stor pris på svar ____________________________ Edit igjen: Vi har nå løst den saken, av ukjent grunn begynte den å fungere når vi endret fra Forms Authentication til Windows Authentication og tilbake igjen. Selv om det ikke gir noen mening, så funker det ihvertfall. Nå er det derimot problemer med to stored procedures i Databasen. Koden under gir feilmeldingen Msg 468, Level 16, State 9, Line number 53 Cannot resolve the collation conflict between "Danish_Norwegian_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. og samme med Line Number 58, 87 og 92. Det er ikke noe spesielt på disse linjene, de er henholdsvis: SELECT RoleId IF (@CountR <> @Num) SELECT UserId IF (@CountU <> @Num) Ser jo ut som om det er noe mønster i det, men notasjonen <> brukes jo andre plasser, og select staments ser jeg heller ikke noe problem i. Skjønner ikke hvorfor, og Google er lite hjelpsom på denne også. Noen som har noen idé? IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[aspnet_UsersInRoles_RemoveUsersFromRoles]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[aspnet_UsersInRoles_RemoveUsersFromRoles] @ApplicationName nvarchar(256), @UserNames nvarchar(4000), @RoleNames nvarchar(4000) AS BEGIN DECLARE @AppId uniqueidentifier SELECT @AppId = NULL SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName IF (@AppId IS NULL) RETURN(2) DECLARE @TranStarted bit SET @TranStarted = 0 IF( @@TRANCOUNT = 0 ) BEGIN BEGIN TRANSACTION SET @TranStarted = 1 END DECLARE @tbNames table(Name nvarchar(256) NOT NULL PRIMARY KEY) DECLARE @tbRoles table(RoleId uniqueidentifier NOT NULL PRIMARY KEY) DECLARE @tbUsers table(UserId uniqueidentifier NOT NULL PRIMARY KEY) DECLARE @Num int DECLARE @Pos int DECLARE @NextPos int DECLARE @Name nvarchar(256) DECLARE @CountAll int DECLARE @CountU int DECLARE @CountR int SET @Num = 0 SET @Pos = 1 WHILE(@Pos <= LEN(@RoleNames)) BEGIN SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos) IF (@NextPos = 0 OR @NextPos IS NULL) SELECT @NextPos = LEN(@RoleNames) + 1 SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos - @Pos))) SELECT @Pos = @NextPos+1 INSERT INTO @tbNames VALUES (@Name) SET @Num = @Num + 1 END INSERT INTO @tbRoles SELECT RoleId FROM dbo.aspnet_Roles ar, @tbNames t WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppId SELECT @CountR = @@ROWCOUNT IF (@CountR <> @Num) BEGIN SELECT TOP 1 N'''', Name FROM @tbNames WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(2) END DELETE FROM @tbNames WHERE 1=1 SET @Num = 0 SET @Pos = 1 WHILE(@Pos <= LEN(@UserNames)) BEGIN SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos) IF (@NextPos = 0 OR @NextPos IS NULL) SELECT @NextPos = LEN(@UserNames) + 1 SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos))) SELECT @Pos = @NextPos+1 INSERT INTO @tbNames VALUES (@Name) SET @Num = @Num + 1 END INSERT INTO @tbUsers SELECT UserId FROM dbo.aspnet_Users ar, @tbNames t WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppId SELECT @CountU = @@ROWCOUNT IF (@CountU <> @Num) BEGIN SELECT TOP 1 Name, N'''' FROM @tbNames WHERE LOWER(Name) NOT IN (SELECT au.LoweredUserName FROM dbo.aspnet_Users au, @tbUsers u WHERE u.UserId = au.UserId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(1) END SELECT @CountAll = COUNT(*) FROM dbo.aspnet_UsersInRoles ur, @tbUsers u, @tbRoles r WHERE ur.UserId = u.UserId AND ur.RoleId = r.RoleId IF (@CountAll <> @CountU * @CountR) BEGIN SELECT TOP 1 UserName, RoleName FROM @tbUsers tu, @tbRoles tr, dbo.aspnet_Users u, dbo.aspnet_Roles r WHERE u.UserId = tu.UserId AND r.RoleId = tr.RoleId AND tu.UserId NOT IN (SELECT ur.UserId FROM dbo.aspnet_UsersInRoles ur WHERE ur.RoleId = tr.RoleId) AND tr.RoleId NOT IN (SELECT ur.RoleId FROM dbo.aspnet_UsersInRoles ur WHERE ur.UserId = tu.UserId) IF( @TranStarted = 1 ) ROLLBACK TRANSACTION RETURN(3) END DELETE FROM dbo.aspnet_UsersInRoles WHERE UserId IN (SELECT UserId FROM @tbUsers) AND RoleId IN (SELECT RoleId FROM @tbRoles) IF( @TranStarted = 1 ) COMMIT TRANSACTION RETURN(0) END ' END Endret 30. april 2011 av Cemi Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå