teisipäev, 7. aprill 2009

SQLConnectionPooli tühjendamine

Juhul, näiteks, kui muudame SQL SERVER Logini parameetreid, näiteks Default Language siis võib juhtuda, et saame veateate
Resetting the connection results in a different state than the initial login. The login fails. Login failed for user 'MINE_KUULE'. A severe error occurred on the current command. The results, if any, should be discarded.

Põhjuseks on SQL Connection Pooli(basseini) olemasolu, mis peab meeles mis sätetega SQL SERVERI login basseini tuli ja kui vahepeal loginit muuta siis basseinis jääb see ju uuendamata. Kui nüüd teha uus päring andmebaasi siis Connection Pooli ja SQLSERVERI login ei lange enam parameetrite poolest kokku.
Lahti saab asjast nii, et tuleb bassein peale SQL SERVER logini muutmist tühjendada

Näiteks muudame SQL SERVER logini keelt süsteemse protseduuriga

EXECUTE sp_defaultlanguage @loginame = @login_name , @language = @lang_name

siis tema kasutamine koos pooli tühjendmisega näeb välja nii, ( DBO.SET_WORKER_LANGUAGE_KUIDO_U on üks enda tehtud salvestatud protseduur mille
sees ka seda sp_defaultlanguage kasutatakse)

using System.Data;
using System.Data.SqlClient;

using (SqlConnection Connection = new SqlConnection(Configuration.ConnectionString))
{
SqlCommand Command = new SqlCommand("DBO.SET_WORKER_LANGUAGE_KUIDO_U",Connection);
Command.CommandType=CommandType.StoredProcedure;
Command.Parameters.AddWithValue("@login_name", username.Trim());
Command.Parameters.AddWithValue("@lang_name", language.Trim());
Connection.Open();
Command.ExecuteNonQuery();
Connection.Close();
//basseini tühjendamine ainult selle ühenduse logini jaoks
SqlConnection.ClearPool(Connection);
// SqlConnection.ClearAllPools(); //kogu bassein tühjaks
}

Blogged with
the Flock Browser

neljapäev, 26. märts 2009

ASP.NET ReportViewer Controli kasutamine koos IE8-ga

IE8 on väljas ja kui on ASP.NET-is kasutusel ReportViewer Contol siis tekib sinna ka printeri ikoon


kui nüüd tahta seda välja trükkida, võib ilmuda IE8 ActiveX paigaldamise hoiatusteade ja kui see paigaldamine ära teha ja siis uuesti trükkida proovida võib ilmuda veateade "Unable to load client print protocol".


Selle asja saab sisevõrgus korda IE8 sätete seadmisega:

Edasi


sätime veebilehe

lubatud sisevõrgu turvalisse tsooni

CustomValidator args.IsValid = false; ja ei mitte kui midagi muud

Et mitte korduvalt sama reha peale astuda siis puust ja punaselt, et kui kasutad veebilehe peal CustomValidatorit
siis tema ServerValidate eventis tuleb väära asja teada andmiseks kasutada args.IsValid = false;

    protected void CustomValidatorSolver_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (this.DropDownListTeostaja.SelectedValue == "-1")
        {
            this.CustomValidatorSolver.ErrorMessage = "Räige reeglite rikkumine";
            args.IsValid = false;
        }
    }

sellest ei ole kasu kui kasutad

this.CustomValidatorSolver.IsValid = false;
niipea kui tuled ServerValidate meetodist välja pöörab ASP.NET CustomValidatorSolver.IsValid tagasi true peale

P.S. Mõnikord on üldse kasulikum vähem programmeerida, kui mingi asi välja ei tule, mine töölt minema ja tule
järgmine päev tagasi. Võidad pool päeva asjatut närvitsemist.


Blogged with the Flock Browser

teisipäev, 24. märts 2009

Kasutaja andmebaasi rollide leidmine



Vaja teada, kas andmebaasi kasutaja on mingis andmebaasi rollis. Kätte saab alloleva funktsiooniga.

SELECT [dbo].[IS_WORKER_ROLE_KUIDO_S]('AKE', 'KAMPUS_WORKER')

Mida tähele panna on see, et SQL2005/2008 ei kobise midagi selle kohta, kui kasutajal pole õigusi süsteemsete tabelite teatud ridade lugemiseks. Libisetakse lihtsalt üle ja mingit infot ei pritsita.

Kui kasutajal ULLE-l pole andmebaasis DBO õigusi aga tahab teada, kas AKE on mingis rollis siis ULLE-na sees olles päring SELECT usu.name FROM sysusers usu jätab osad read "vahele". Lahenduseks siin impersoneerimise kasutamine, ehk teeb funktsiooni WITH EXECUTE AS 'DBO' suvandiga, et korrektesid tulemusi saada

ALTER FUNCTION [dbo].[IS_WORKER_ROLE_KUIDO_S](@kasutaja NVARCHAR(25), @roll NVARCHAR(25))
RETURNS INT
WITH EXECUTE AS 'DBO' --Et oleks ligipääsu õigus kõikidele tabeli ridadele
AS
BEGIN
DECLARE @out INT
IF EXISTS( SELECT usu.name FROM
sysusers usu WITH(NOLOCK) LEFT OUTER JOIN
(sysmembers mem WITH(NOLOCK) INNER JOIN sysusers usg WITH (NOLOCK) ON mem.groupuid = usg.uid) on usu.uid = mem.memberuid
LEFT OUTER JOIN master.dbo.syslogins lo WITH (NOLOCK) ON usu.sid = lo.sid
WHERE (usu.islogin = 1 AND usu.isaliased = 0 AND usu.hasdbaccess = 1) AND
(usg.issqlrole = 1 OR usg.uid is null) AND
usu.name = @kasutaja AND usg.name=@roll )
SET @out=1

RETURN ISNULL(@out,0)

END
Blogged with the Flock Browser

Andmetäite vältimise pealepeanemine Vista peal ehk DEP

Andmetäite vältimine ehk DEP on lühidalt lahti seletatud siin

http://windowshelp.microsoft.com/Windows/et-EE/help/186de3d0-01af-4d4c-981d-674637d2f4bf1061.mspx

ja sügavamalt siin
http://support.microsoft.com/kb/875352

Kuidas seda maha ja peale panna on kirjeldatud
http://windowshelp.microsoft.com/Windows/en-US/help/1d9bb9b4-f6ba-466d-ac2b-7b8c4f8361611033.mspx


Kui on eestikeelne Vista siis piltlikult käib pealepanek nii, et avad juhtpaneeli



sealt edasi valid Süsteem


klikid Täpsustatud süsteemisätted









ja sealt vaatab Täpsemalt Jõudluse sätteid

ja lülitame DEP-i sisse

DEP hea asi selleks, et viirused nii kergesti ligi ei pääseks.

















pühapäev, 22. märts 2009

ASP.NET CollapsiblePanelExtender

Kõigepealt tuleb ASPX lehe peal muuta DOCTYPE ära

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >

Vaja selleks, et IE asjast aru saaks, muud(Flock, Safari, Opera, Firefox) töötavad ka
standardse
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
määranguga aga IE tahab XHTML-i (on siis tegu hullumeelsuse või geniaalsusega ?)

Extenderiga seotud asp:Panel-i kokkupaneminke käib "ClientState" sättimisega

this.PanelUusprobleem_CollapsiblePanelExtender.ClientState = "true";

paneb laiendusega seotud paneeli kokku


Blogged with the Flock Browser

kolmapäev, 18. märts 2009

Veebilehe validaatorite grupi seadmine

Vaja näiteks, et kõik usercontroli validaatorid oleksid samas grupis

   
public void seaValidaatorGrupp(string vgrupp)
{
    foreach (BaseValidator vali in this.Page.Validators)
    {
          vali.ValidationGroup = vgrupp;
    }
}
Blogged with the Flock Browser