Gå til innhold

Anbefalte innlegg

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 av Cemi
Lenke til kommentar
Videoannonse
Annonse

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 av Cemi
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...