kolmapäev, 2. juuni 2010
DBCC FREEPROCCACHE kaudu läbi ADO.NET kaudu salvestatud protseduuri jooksutamisele vungi sisseandmine
MS SQL SERVER-is korra protseduuride vahemälu tühjaks tõmmata
DBCC FREEPROCCACHE
Hoiatatakse küll, et ärge kasutage aga lõpptulemusena saad ka läbi ADO.NET välja kutsutud protseduuri kiiresti käima.
Soovitatav lahendus aga sellistel juhtumistel on SP poolt parameetrite arvamine ära lõpetada, ehk teisenda protseduuri parameetrid lokaalseteteks muutujateks
CREATE PROCEDURE ParameetriArvamine
@nimetus NVARCHAR(10)
WITH RECOMPILE
AS
DECLARE @nimetus1 NVARCHAR(10)
--teeme parameetri teisendamise, et SQL SERVER oskaks õiget käivitusplaani teha
SET @nimetus1 = @nimetus
SELECT id, nimi FROM SinuTabel WHERE nimi = @nimetus1
teisipäev, 18. mai 2010
ConnectionString seadete ülevõtmine virtuaalkataloogide puhul
260 <location path="DEMO">
261 <connectionStrings>
263 <add name="TkConnectionString" connectionString="Data Source=SQLSERVER;Min Pool Size=2;Initial Catalog=DEMO-BAAS;Application Name=DEMORAKENDUS;User ID=DEMO_KASUTAJA;Password=seeseGane234ja2342keeRuline" providerName="System.Data.SqlClient"/>
269 </connectionStrings>
Kõik nagu õige aga VirtualDirectoryst asja käima tõmmates pistab kisama, et va
"TkConnectionString" on juba olemas. Kuna see ConnectionStringide osa on
tõepoolest varem kirja pandud. Lahendus asjale see, et algne ConnectionString osa
tuleb mappida
29 <location inheritInChildApplications="false">
vahele näiteks niimoodi
29 <location inheritInChildApplications="false">
30 <connectionStrings>
31 <add name="TkConnectionString" connectionString="Data Source=SQLSERVER;Min Pool Size=2;Initial Catalog=BAASE;Application Name=OIGERAKENDUS;User ID=ORIGINAAL;Password=ikka97raSke76ja3536keerUline" providerName="System.Data.SqlClient"/>
32 </connectionStrings>
33 </location>
Nüüd nii, et VirtualDirectory-s olevasse rakendusse pöördumisel võtab teise andmebaasi ühenduse külge, ehk selle mis
261 <location path="DEMO">
osa sees kirjas on. VirtualDirectorys olevas web.config failis jätad ConnectionStrings osa üldse ära.
neljapäev, 8. aprill 2010
IE-l on Request.UrlReferrer null JavaScriptiga ümbersuunamise puhul
string scriptString = "<script type=text/javascript> alert('"Uuele lehele "');window.location='UusLeht.aspx';</script>";
window.location='UusLeht.aspx' teeb ümbersuunamist
lisame JavaScripti dünaamiliselt lehele
if (!this.Page.ClientScript.IsClientScriptBlockRegistered("clientScript"))
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", scriptString);
}
peale sellist ümbersuunamist on UusLeht.aspx lehe peal IE puhul this.Request.UrlReferrer null
Asendusena võib kasutada seda, et GET päringule paned lisaks referer=KustMaTulen.aspx
aga see ei pidavat turvafiltritele meeldima, võimalik turvarisk
teisipäev, 16. märts 2010
Fondi tingimuslik muutmine ReportViewer controlis
ja klikid Fx nupule, kogu edasine tarkus selles, et fondi nimi tuleb panna jutumärkide "" vahele=IIf(Fields!GUARANTEE_MONEY.Value > Fields!GUARANTEE_MONEY_PAID.Value,"Bold","Normal")
Kui jutumärke ei pane saad kompileerimisel veateate
The FontWeight expression for the textbox ‘textbox19’ contains an error: [BC30451] Name 'Bold' is not declared.
kolmapäev, 10. märts 2010
Kustutamine tabelmuutujast SELF-CORRELATED päringuga
DELETE FROM @lepingud WHERE EXISTS
( SELECT OP_LOG.CONTRACTS_ID FROM dbo.OP_LOG
WHERE OP_LOG.TEXT_TITLES_ID = 49 AND OP_LOG.CONTRACTS_ID = [@lepingud].CONTRACTS_ID )
reede, 5. märts 2010
LinkedServeri konfigureerimine ilma IP aadressita
Aga saab ka nii, et IP aadressi asemel võid kasutada näiteks nime, hea siis kui IP aadress peaks muutuma ei pea koodis tabelite juurde pöördumisi ümber kirjutama.
Mudida tuleb Windows Serveril hosts faili mis asub tavaliselt C:\Windows\System32\drivers\etc
kataloogis. Sinna faili kirjutad rea juurde
ip-aadress Serveri nimi #kommentaar
xxx.129.109.306 TEINESERVER #see teine SQL server millega tahad ühenduse luua
ja kui linked serverit hakkad tegema siis IP aadressi asemel võid kasutada TEINESERVER nime
esmaspäev, 1. märts 2010
ReportVieweri andmetabeli sorteerimine .NET 3.5 korral
DataSource külge siis sai seal ka .NET2.0 korral kohe andmeid sorteerida
dsReportsTableAdapters.RAPORT_KUIDO_STableAdapter ta = new dsReportsTableAdapters.RAPORT_KUIDO_STableAdapter();
dsReports.RAPORT_KUIDO_SDataTable tb = new dsReports.RAPORT_KUIDO_SDataTable();
ta.Fill(tb, begin, end);
ja panid andmed koos sorteerimisega Reportvieweri DataSource-le külge
this.ReportViewerAsendus.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsReports_RAPORT_KUIDO_S", tb.Select("","SURNAME")));
see tb.Select("","SURNAME") tegi sorteerimise
Mingi hetk aga .NET3.5 tableAdapteri peale üle minnes, kus LINQ ka küljes on, tekib häda
nende veergudega, mis võivad andmebaasist tulles ka NULL-id olla, ehk
ReportVieweri IsNothing() funktsioon enam ei funka.
=IsNothing(Fields!VALID_UNTIL_DATE.Value) enam NULL-i ei tunnista, kuna veerus on "mingi muu asi sees", ehk dsReports.RAPORT_KUIDO_SDataTable tüübi asemel on DataRow[] massiiv millega ReportViewer 2008 Service Pack1 NULL-iste väärtuste korral hätta jääb.
Asja saab jälle tööle nii, et tuleb sorteerimine teha DataTable -dega ära ennem kui reportViewerile külge paned.
Lisakood sorteerimiseks võib välja näha nii
DataRow[] tulem= tb.Select("", "SURNAME");
dsReports.RAPORT_KUIDO_SDataTable tb2 = new dsReports.RAPORT_KUIDO_SDataTable();
foreach (DataRow rida in tulem)
{
tb2.ImportRow(rida); //impordime read uude tabelisse
}
this.ReportViewerAsendus.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsReports_RAPORT_VALITUT_ASUKKAAT_KUIDO_S", tb2));// siin paneb juba uue tabeli külge