Har ett lite underigt problem. Har en sida där jag kan välja alternativ ur ett antal ListBoxar. Dessa värden i sin tur genererar X antal rader i en databas (MSDE). Ibland upp mot 1000 rader. Hur ser din connectionsträng ut? du kan ju testa att slänga på "Min poll size=0;Max pool size=100;" Eller liknande. Det hjälpte tyvärr inte heller... Processid under 50 är systemprocesser och "gills inte" "Däremot kan det vara en miss," Vad händer om du slaskar in Hjälpte tyvärr inte heller. MSDE är väl strypt till några st "samtidiga processer" (M$ vill att du köper Sql Server..) Om "Max pool Size" är 1 eller 100 gör ingen skillnad... Prova att stänga av connection pooling?Databasstrul - antal anslutningar...
Problemet är att jag får följande fel;
"An unhandled exception of type 'System.Exception' occurred in dlldatabasehandler.dll
Additional information: Database error:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."
C#-koden:
public void AddAccess(ArrayList alAccessStruct)
{
try
{
//Initiate
SqlConnection sqlConnection = new SqlConnection(sConnectionString);
sqlConnection.Open();
System.Data.DataSet dataSet = new DataSet(); //<---- ????
System.Data.SqlClient.SqlCommand sqlCommand = new SqlCommand("spAddAccess", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
for (int iLoop = 0; iLoop < alAccessStruct.Count; iLoop++)
{
//Set parameters
sqlCommand.Parameters.Clear();
sqlCommand.Parameters.Add("@LockId", ((AccessStruct)alAccessStruct[iLoop]).iLockId);
sqlCommand.Parameters.Add("@PhoneId", ((AccessStruct)alAccessStruct[iLoop]).iPhoneId);
sqlCommand.Parameters.Add("@UserId", ((AccessStruct)alAccessStruct[iLoop]).iUserId);
sqlCommand.Parameters.Add("@Start", ((AccessStruct)alAccessStruct[iLoop]).dtStart);
sqlCommand.Parameters.Add("@Stop", ((AccessStruct)alAccessStruct[iLoop]).dtStop);
sqlCommand.Parameters.Add("@UsePin", ((AccessStruct)alAccessStruct[iLoop]).bUsePin);
//Set parameter data types
sqlCommand.Parameters[0].DbType = DbType.Int16;
sqlCommand.Parameters[1].DbType = DbType.Int16;
sqlCommand.Parameters[2].DbType = DbType.Int16;
sqlCommand.Parameters[3].DbType = DbType.DateTime;
sqlCommand.Parameters[4].DbType = DbType.DateTime;
sqlCommand.Parameters[5].DbType = DbType.Boolean;
//Execute the query and close the connection
sqlCommand.ExecuteNonQuery();
}
sqlConnection.Close();
}
catch(Exception exception)
{
throw new Exception("Database error (x60): " + exception.Message);
}
}
Stored Prodecuren:
CREATE PROCEDURE [spAddAccess]
(
@LockId int,
@PhoneId int,
@UserId int,
@Start datetime,
@Stop datetime,
@UsePin bit
)
AS
INSERT INTO tblAccess (LockId, PhoneId, UserId, Start, Stop, UsePin)
VALUES (@LockId, @PhoneId, @UserId, @Start, @Stop, @UsePin)
GO
Som synes i koden ovan öppnar jag bara en anslutning. Hur kan dom då ta slut? Öppnar SP:n nya varje gång den insertar?
Sv: Databasstrul - antal anslutningar...
Kör du MSDE själv på din dator eller är det risk att flertalet personer är uppkopplade samtidigt, isf kan du ju kolla hur många anslutningar som är aktiva just nu Sv:Databasstrul - antal anslutningar...
Angende anslutningsar så är jag lite osäker på vad servern egentligen menar. Kör man "sp_who" ser man att det finns fem alsutningar mot databasen varav 4 är "sleeping".
Problemet är ju fortfarande att jag, vad jag vet, inte öppnar mer än en anslutning.Sv:Databasstrul - antal anslutningar...
Däremot kan det vara en miss, eller något annorlunda med din connectionpooling (som man egentligen inte skall pilla på ändå...)
Är problemet löst, så är det nog ingen fara med lite extra spid
/mickeSv: Databasstrul - antal anslutningar...
Miss som i fel på koden? Du har den ovan.. ser du nått fel?
Spid? Om det fungerar?
Det här börjar se ut som ett problem som inte går att lösa vilket stör mig väldigt mycket.Sv:Databasstrul - antal anslutningar...
Connection.Open
och
Connection.Close
i din loop?
Öppna och stäng connection för varje gång du kör din procedur. ConnectionPooling borde ta hand om det och göra att det ändå inte är slött...
/mickeSv: Databasstrul - antal anslutningar...
Ser ni nått som verkar fel i min kod? Det verkar ju helt klart som om något äter upp alla mina anslutningar.Sv:Databasstrul - antal anslutningar...
Jag vet inte om det påverkar negativt här.. kanske.
Testa att sätta Max Pool Size=1
Öka Connection.TimeOut till typ 180
Öka ASP Script Timeout (IIS console)Sv: Databasstrul - antal anslutningar...
Att öka timeouten hjälpte inte...
Det är ingen hemsida...
Vad som är så konstigt är att det verkar som det skapas nya anslutningar hela tiden.
Fasten att jag bara öppnar EN anslutning.Sv:Databasstrul - antal anslutningar...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconnectionpoolingforoledbnetdataprovider.asp