teisipäev, 30. detsember 2008

SQL2005 XML TIMESTAMP byte[] konvertimine C#

Kui teed andmebaasi tabelist for XML TYPE päringu ja seal sees on ka timestamp väli siis tulemus on näiteks selline

<CvNodeElement CfPers_CVId="3" Title="Haridustee" CfLangCode="et-EE" CfClassId="1" CfClassSchemeId="49">
<Node ExpSkillsId="23" IsPublic="0" Timestamp="AAAAAAATo9I=" Pers_CV_CfPers_ExpSkillsId="16" Text="2005 TTÜ" />
<Node ExpSkillsId="21" IsPublic="0" Timestamp="AAAAAAATo9o=" Pers_CV_CfPers_ExpSkillsId="15" Text="1994 - 2005 Saku Gümnaasium" />
</CvNodeElement>

Timestamp on näiteks AAAAAAATo9I=

Kui tahad C# seda string tagasi TIMESTAMP-iks keerata siis käib see nii

byte[] bt = new byte[8];
bt=Convert.FromBase64String("AAAAAAATo9I=");

Blogged with the Flock Browser

esmaspäev, 22. detsember 2008

DevExpress ASPxGrid CustomButtonCallback töölesaamine

Kui selline vidin kasutusel ja vaja saada GridViewCommandColumnCustomButton tööle, siis tuleb
Gridil endal seada EnableCallBacks="false"

Näide selline, et seal nüüd kaks nuppu rea peal


<dxwgv:ASPxGridView ID="ASPxGridViewElements" runat="server" KeyFieldName="CfPers_ExpSkillsId"
                                Settings-ShowColumnHeaders="false" AutoGenerateColumns="false" SettingsText-ConfirmDelete="Kas soovid kustutada ?"
                                onhtmldatacellprepared="ASPxGridViewElements_HtmlDataCellPrepared" SettingsBehavior-ConfirmDelete="true"
                                oncustombuttoncallback="ASPxGridViewElements_CustomButtonCallback"
                                onrowdeleting="ASPxGridViewElements_RowDeleting" EnableCallBacks="false"  >
                            <Columns>
                            <dxwgv:GridViewDataColumn VisibleIndex="0" FieldName="CfPers_ExpSkillsId">
                                <DataItemTemplate>
                                    <dxe:ASPxLabel runat="server" ID="ASPxLabelPeriod" Text=""></dxe:ASPxLabel>
                                </DataItemTemplate>
                            </dxwgv:GridViewDataColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="CfNameEST" VisibleIndex="1">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="CfNameALT" VisibleIndex="2">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewCommandColumn ButtonType="Image" DeleteButton-Visible="true" Name="CommandColumn" VisibleIndex="3">
                            <CustomButtons>
                                <dxwgv:GridViewCommandColumnCustomButton Text="Muuda" Image-AlternateText="Muuda" ID="ButtonMuuda" Image-Url="../App_Themes/ETIS/gfx/icons/icon_edit.gif">
                                </dxwgv:GridViewCommandColumnCustomButton>
                            </CustomButtons>
                            <DeleteButton Image-Url="../App_Themes/ETIS/gfx/icons/icon_delete.gif" Image-AlternateText="Kustuta" Text="Kustuta">
                            </DeleteButton>
                            </dxwgv:GridViewCommandColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="StartYear" VisibleIndex="4" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="EndYear" VisibleIndex="5" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="TimestampEST" VisibleIndex="6" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="TimestampALT" VisibleIndex="7" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="ExpSkillsIdEST" VisibleIndex="8" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                            <dxwgv:GridViewDataTextColumn FieldName="ExpSkillsIdALT" VisibleIndex="9" Visible="false">
                            </dxwgv:GridViewDataTextColumn>
                           
                            </Columns>
</dxwgv:ASPxGridView>

"Kustuta" - selle nupu jaoks et tuleks ennem hoiatusaken tuleb SettingsBehavior-ConfirmDelete="true" ja et ilus tekst tuleks siis SettingsText-ConfirmDelete="Kas soovid kustutada ?"
ja kustutamine ise tehakse

        protected void ASPxGridViewElements_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            this.DeleteCVElement(Convert.ToInt32(e.Values["CfPers_ExpSkillsId"].ToString()));
            //see Cancel osa on ASPx DataGridi nõutud värk
            e.Cancel = true;
            this.ASPxGridViewElements.CancelEdit();
            this.FillDataGrid();
        }

meetodis, kus kõigepealt kustutab enda tehtud meetodiga, siis keelab Gridi enda kustutamise meetodi ära
            e.Cancel = true;
            this.ASPxGridViewElements.CancelEdit();

ja täidab Gridi andmetega uuesti
this.FillDataGrid(); // see siin on omalooming

"Muuda" nupp, siin see ennam korralikult tööle ei hakka, kui Gridil endal EnableCallBacks="false" , muidu klikid j aklikid aga ekraanil midagi ei juhtu


        protected void ASPxGridViewElements_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
        {
            if (e.ButtonID == "ButtonMuuda")
            {
                try
                {
                    ASPxGridView grid = sender as ASPxGridView;
                    string[] copiedFields = new string[] { "CfNameEST", "CfNameALT", "CfPers_ExpSkillsId", "StartYear", "EndYear", "TimestampEST", "TimestampALT", "ExpSkillsIdEST", "ExpSkillsIdALT" };
                    System.Collections.Hashtable copiedValues = new System.Collections.Hashtable();
                    foreach (string fieldName in copiedFields)
                    {
                        copiedValues[fieldName] = grid.GetRowValues(e.VisibleIndex, fieldName);
                    }
                    this.ASPxButtonLisa.Visible = false;
                    this.ASPxLabelTekstLisa.Text = "Muuda " + this.ASPxLabelTextName.Text.ToLower();
                    this.PanelElementLisa.Visible = true;

                    if (this.TekstMemo)
                    {
                        this.ASPxMemoEST.Text = copiedValues["CfNameEST"].ToString();
                        this.ASPxMemoALT.Text = copiedValues["CfNameALT"].ToString();
                    }
                    else
                    {
                        this.ASPxTextBoxEST.Text = copiedValues["CfNameEST"].ToString();
                        this.ASPxTextBoxALT.Text = copiedValues["CfNameALT"].ToString();
                    }
                    if (this.alguspaevaridanahtav)
                    {
                        this.ASPxTextBoxAlgus.Text = copiedValues["StartYear"].ToString();
                    }
                    if (this.lopppaevaridanahtav)
                    {
                        this.ASPxTextBoxLopp.Text = copiedValues["EndYear"].ToString();
                    }
                }
                catch (SystemException ex)
                {
                    this.CustomValidator1.ErrorMessage = ex.Message;
                    this.CustomValidator1.IsValid = false;
                }
            }
        }




 

Blogged with the Flock Browser

reede, 5. detsember 2008

Kuupäeva pp.kk.aaaa formaadis kontroll

Et vaja kohe kindlasti kontrollida, et kuupäeva sisestus oleks pp.kk.aaaa formaadis
siis näiteks selline meetod mis kasutab DateTime.ParseExact meetodit
using System.Globalization;

public bool ValidateDateTimeFormat(string date, string format)
{
CultureInfo provider = CultureInfo.InvariantCulture;
try
{
DateTime.ParseExact(date, format, provider);
return true;
}
catch
{
return false;
}
}

ja vastava textboxi CustomValidatori ServerValidate meetodi teed niimoodi

protected void CustomValidatorSynniaeg_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = ValidateDateTimeFormat(this.TextBoxSynniaeg.Text.Trim(),"dd.MM.yyyy");
}

ning rahu majas

Kui üldse vaja pp.kk.aaaa tekstivälja kuupäevaks pöörata siis
CultureInfo provider = CultureInfo.InvariantCulture;
System.DateTime paeve = DateTime.ParseExact(this.TextBoxPaev.Text.Trim(), "dd.MM.yyyy", provider);
Blogged with the Flock Browser

neljapäev, 4. detsember 2008

XML väljaga info edasiandmine trigerisse

Selline juhtum, et triger on pandud andmebaasi muutusi logima ja nüüd situatsioon, et alustabelis kõiki andmeid ei ole aga hädasti oleks vaja üht-teist trigerile lisaks teada anda. Üks lahendus selline, et teeb baastabelisse juurde XML tüüpi välja näiteks APPLICATIONS tabelile APPOPTIONS

ja kui nüüd SP-ga tabelis midagi muuta

--kirjutame APPOPTIONS xml tüüp välja sisse lepingu numbri väärtuse

DECLARE @aop XML, @lep INT, @relcon NVARCHAR(2000)
--siin on üks string muutuja, mida edaspidi kasutame, et saaks sql:variable kasutada ja siia paneme meid huvitava info kirja
SET @relcon='<RELATED_CONTRACT>'+CAST(@contractId AS NVARCHAR(20))+'</RELATED_CONTRACT>'
--loeme enne kirjutamist APPOPTIONS välja väärtuse (siin oleks muidugi ilus CURSORIT kasutada)
SET @aop=( SELECT APPLICATIONS.[appoptions] FROM [dbo].[APPLICATIONS] WHERE APPLICATIONS.[ID]= @application_id)

IF @aop IS NULL --kui XML-i ei ole midagi kirjutatud
SET @aop=CAST(@relcon AS XML) --pöörame muutuja XML-iks
ELSE
BEGIN
--kontrollime, kas RELATED_CONTRACT on juba olemas
SET @lep = @aop.value('/RELATED_CONTRACT[1]', 'INT') --LEPINGU NUMBER ON int andmetüüp, mis meid huvitav
IF @lep IS NULL --KUI RELATED_CONTRACT on puudu, lisame lõppu vastava NODE
SET @aop.modify('insert text{sql:variable("@relcon")} as last into (/)[1]')
END

ja nüüd UPDATE-me tabeli välja
UPDATE [dbo].[APPLICATIONS]
SET [appoptions]=ISNULL(@aop,[appoptions]) WHERE ID=@application_id

ja trigeris saame asja teada nii

SELECT @aop=INSERTED.appoptions FROM INSERTED
DECLARE @lep INT
SET @lep = @aop.value('/RELATED_CONTRACT[1]', 'INT')

ja käes ta nüüd ongi ning salvestatud @lep muutujasse see mille ennist @contractId sisse andsime

Blogged with the Flock Browser

neljapäev, 30. oktoober 2008

SqlDataSource DateTime parameetri lisamine ja eemaldamine

Lisamine käib nii:

this.SqlDataSourceTenants.SelectParameters.Add("submission_date", System.TypeCode.DateTime, this.tbSubmissionDate.Text.Trim());

ja eemaldamine nii:

this.SqlDataSourceReport.SelectParameters.Remove(SqlDataSourceReport.SelectParameters["start_date"]);

Lahendab ära need juhtumid, kus mõnikord võib 17.06.2008 puhul päev ja kuu vahetusse minna ja viga pilduma hakata

Blogged with the Flock Browser

teisipäev, 14. oktoober 2008

.NET ASSEMBLY eemaldamine Global Assembly Cache -st

Kui .NET2 Framefork Configuration-iga kuidagi maha ei saa tuleb käsitsi GACUTIL-iga teha

gacutil /uf "ReportFunctions"

ja kui see ka ei aita siis käsitsi GAC kataloogi kallale
ehk Command Prompt käima

ja sealt läheme GAC kataloogi

cd c:\windows\assembly

VisualStudio2008 asjad on GAC_MSIL alamkataloogis
cd gac_msil

ja sealt võtame vastava alamkataloogi maha, kui Assembly nimi on ReportFunctions siis

rmdir ReportFunctions /s/q

Seda käsitsi eemaldamist ei soovitata aga kui pole midagi muud teha, siis võib seda proovida

Blogged with the Flock Browser

reede, 10. oktoober 2008

SQL SERVER 2005 XML andmevälja näitamine GridView-ga

Et on siis SQL SERVER 2005 tabel ja seal sees on mõni tulp XML tüüpi

CREATE TABLE [dbo].[APPLICATION_CONTRACTS](
[APPLICATIONS_ID] [int] NOT NULL,
[CONTRACTS_ID] [int] NOT NULL,
[APPLICATION_OPTIONS] [xml] NULL)

ja müüd sinna APPLICATION_OPTIONS kirjutame XML andmetüübi sisse

...
DECLARE @aop XML
DECLARE @temp TABLE (jrk INT PRIMARY KEY)
INSERT INTO @temp ([jrk]) VALUES ( 1)
SET @jrk=( SELECT TOP 1 jrk FROM [dbo].[APPLICATIONS_S](DEFAULT) WHERE application_id = @application_id)
SET @aop = (SELECT TOP 1 ISNULL(@jrk,0) AS ApplicationPlaceInOrder FROM @temp FOR XML PATH('APPLICATION_OPTIONS'), TYPE)

INSERT INTO [dbo].[APPLICATION_CONTRACTS] (APPLICATIONS_ID, CONTRACTS_ID, APPLICATION_OPTIONS])
VALUES (@application_id, @contract_id,@aop)

tulemuseks on APPLICATION_OPTIONS välja sisu järgmine

<APPLICATION_OPTIONS>
<ApplicationPlaceInOrder>8</ApplicationPlaceInOrder>
</APPLICATION_OPTIONS>

siin <application_options> on XML juurelemendi nimi (langeb kogemata kokku ka andmevälja enda nimega

Ja nüüd tahame seda asja näidata ASP:Gridview

Loeme andmet baelist, APPLICATION_OPTIONS on ainult XML tüüpi
SELECT [APPLICATIONS_ID], [CONTRACTS_ID], [APPLICATION_OPTIONS]
FROM [dbo].[APPLICATION_CONTRACTS] WHERE [APPLICATIONS_ID]=4752

Iseenesest töötab ka kui lihtsalt see APPLICATION_OPTIONS sättida Gridview DataBound väljaks (sel juhul näidatakse ainult elementide sisu, kui tahetakse nii elementide nimetust ja sisu näidata siis siin üks näide:



Teeme GridView-sse ühe TemplateField ,kus on PlaceHolder kuhu bindime XML sisu

<asp:TemplateField headertext="<%$ Resources:resource, Notes %>">
<ItemTemplate>
<asp:PlaceHolder runat="server" id="AppOption">
</asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>


GridView DataBound eventis paneme XML sisu PlaceHolderi sisse tabeli kujul, ehk loeme XML välja kui stringi ja selle stringist loome XmlDocument ja siiis käime mööda seda XML dokumenti pidi allapoole ja teeme samal ajal ka tabelit

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItem != null)
{

PlaceHolder xl = (PlaceHolder)e.Row.FindControl("AppOption");
if (!((System.Data.Common.DbDataRecord)e.Row.DataItem)["APPLICATION_OPTIONS"].Equals(DBNull.Value))
{
string he = ((System.Data.Common.DbDataRecord)e.Row.DataItem)["APPLICATION_OPTIONS"].ToString();
XmlDocument doc = new XmlDocument();
doc.LoadXml(he);
System.Web.UI.WebControls.Table te = CWTurukampusHelperUtils.xmlMarked(doc);
xl.Controls.Add(te);
}
}

tükk mis nüüd sellest XmlDocument-ist teeb asp:Table valmis

public static System.Web.UI.WebControls.Table xmlMarked(XmlDocument doc)
{
System.Web.UI.WebControls.Table tabel = new Table();
XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.ChildNodes;
TableRow rida;
TableCell va;
Literal vas;
foreach (XmlNode nod in nodes)
{
rida = new TableRow();
va = new TableCell();
vas = new Literal();
try //kui ta sellist node nimetust ei leia ressursi tekstidest, võtame NODE enda nime
{

vas.Text = HttpContext.GetGlobalResourceObject("Resource", nod.Name).ToString();
}
catch (SystemException ex)
{
vas.Text = nod.Name;
}
va.Controls.Add(vas);
rida.Cells.Add(va);
va = new TableCell();
vas = new Literal();
vas.Text = nod.InnerText;
va.Controls.Add(vas);
rida.Cells.Add(va);
tabel.Rows.Add(rida);
}

return tabel;
}

Blogged with the Flock Browser

teisipäev, 2. september 2008

SSIS ei tööta OLE DB source kui tahad kasutada salvestatud protseduuris ajutisi tabeleid

Tuleb kasutada tabelmuutujaid, #temp ajutised tabeleid ei saa kasutada

Siin ka selgitus
http://blogs.conchango.com/jamiethomson/archive/2006/12/20/SSIS_3A00_-Using-stored-procedures-inside-an-OLE-DB-Source-component.aspx

Ja ka ülevaatlikum selgitus + mõned ümbernurga tegemised
http://www.sqlservercentral.com/articles/SSIS/65112/

Blogged with the Flock Browser

reede, 22. august 2008

ASP.NET automaatne veebilehelt tagasi suunamine

Kui on vaja teha selline asi, et oled ühe veebilehe peal ja pead vahepeal teise veebilehe peal käima, et sealt lehelt mingeid andmeid teada saada ja siis automaatselt samale lehele tagasi tulla koos loetud andmetega saab kasutada järgmist lahendust:

Ehk meil on vaja teha järgmine lähenemine
loginTenant.aspx => EstIdCard.aspx(sellelt lehelt saadud andmed saadame tagasi) => loginTenant.aspx


loginTenant.aspx veebilehel

<%--teeme strongly referenced type EstIdCard.aspx veebilehle, et sealt public properteid lugeda--%>
<%@ PreviousPageType VirtualPath="~/EstIdCard.aspx" %>

<asp:Label ID="Label2" runat="server"></asp:Label>

<%--selle nupu ButtonIDTest vajutus käivitab operatsiooni--%>
<asp:Button ID="ButtonIDTest" runat="server" CausesValidation="False"
Text="ButtonTest" PostBackUrl="~/EstIdCard.aspx" />


loginTenant.cs code-behind
protected void Page_Load(object sender, EventArgs e)
{
if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
{
//saame eelmiselt lehelt andmed kätte
this.Label2.Text += PreviousPage.idcode;
}
else
{
this.Label2.Text = "ei õnnestunud";
}
}

EstIdCard.aspx veebileht, siia kirjutame nüüd jupi javascripti, et teha automaatne tagasisuunamine, kasutame asp:Button PostbackUrl-i et loginTenant.aspx lehel saaksime kindlad olla, et toimub tagasisuunamine.
Siin peab just olemas, see PostBackUrl, et
see osa töötaks: if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
Lihtsalt Response.Redirect kasutada ei saa.

See javascriptis tehtud funktsioon ExecuteClick irriteerib nupu vajutust

<script language="javascript" type="text/javascript">
<!--
function ExecuteClick() {
document.getElementById("<%=ButtonTagasi.ClientID %>").click();
}
-->
</script>
<asp:Button ID="ButtonTagasi" runat="server" CausesValidation="False"
PostBackUrl="~/loginTenant.aspx" Text="Click to continue..." />

EstIdCard.cs

public property, selleks, et saaks andmeid edastada

public string idcode
{
set { this.ViewState["isikukood"] = value; }
get
{
if (this.ViewState["isikukood"] == null)
return "";
else
return this.ViewState["isikukood"].ToString();
}
}


protected void Page_Load(object sender, EventArgs e)
{
idcode = "IDnumbriväärtus"; // väärtustame public propery
//lisame nupule automaatseks tagasisuunamiseks javascripti jupi
this.ButtonTagasi.Attributes.Add("onFocus", "ExecuteClick()");

}

protected void Page_PreRender(object sender, EventArgs e)
{
//siin nüüd sätime nupule fookuse, ehk käivitame varem tehtud funktsiooni Javascriptis ExecuteClick, mis teeb cross-page postbacki tagasi algsele loginTenant.aspx lehele
this.ButtonTagasi.Focus();
}


Blogged with the Flock Browser

esmaspäev, 7. juuli 2008

XSD failid ei avane Design vaates

Tahad strongly typed dataset-i mudida Design vaates aga ei tule seda endist tuttvat pilti ette vaid teeb faili ainult XML vaates lahti ja kui üritad vaadata Design View-s siis ikka ei midagi, jääb endine pilt

VisualStudio 2008 maha ja peale installimine aita, võid saada veateate

Make sure the application for the file type (.xsd) is installed

Õigeks ajamine käib nii:

a. Paremklõpsa Visual Studio2008-s hiirega xsd faili peal ja võta menüüst Open With ja kui tuleb rakenduste nimekiri ette siis vali seal DatSet Editor

b. Kui DatSet Editor on nimekirjast puudu, siis käivita VisualStudio 2008 Command Prompt ja
sealt käivita devenv /resetskippkgs , see paneb need editorid nimekirja tagasi
Blogged with the Flock Browser

kolmapäev, 25. juuni 2008

Tableadapteri CommandTimeout muutmine

Kui on tehtud StronglyTyped dataset koos TableAdapteriga ja tahetakse nüüd mingil TableAdapateril seda CommandTimeout-i suuremaks seada tuleb kasutada järgmist nippi, et
teha partial class samale nimeruumile, kus on antud DataSeti TableAdapterid.

Näiteks DataSeti dsAccommodationApplication TableAdapterite jaoks tee samasse AppCode kataloogi üks klassifail (cs laiendiga, kui proged C#)

ja kui nüüd tahad WORKER_APPLICATIONS_KUIDO_STableAdapter-il seda CommandTimeout muuta, siis selle jaoks tee lihtsalt üks public meetod, mis seda CommandTimeouti muudab

using System.Data;

namespace dsAccommodationApplicationTableAdapters
{
public partial class WORKER_APPLICATIONS_KUIDO_STableAdapter
{
public void SetCommandTimeout(int timeout)
{
foreach (IDbCommand command in CommandCollection)
command.CommandTimeout = timeout;
}
}

}

ja asja saab kasutada järgmiselt:
dsAccommodationApplicationTableAdapters.WORKER_APPLICATIONS_KUIDO_STableAdapter ta = new dsAccommodationApplicationTableAdapters.WORKER_APPLICATIONS_KUIDO_STableAdapter();
//sätime selle ajalise ootamise pikemaks
ta.SetCommandTimeout(600);

Blogged with the Flock Browser

neljapäev, 12. juuni 2008

Server.Transfer ASP.NET AJAX-i UpdatePanel-i sees

Annab vea Sys.WebForms.PageRequestManagerParserErrorException. Põhjus selles, et AJAX ei saa sellest Server.Transfer -iga serveri poolsest lehe vahetamisest aru kuna vajab suhet kliendi poolse browseriga.

Lahendus: kasuta Response.Redirect



Blogged with the Flock Browser

neljapäev, 5. juuni 2008

Self-correlated UPDATE lause süntaks SQL2005 tabelmuutujaga

Tuleb muuta andmeid tabelmuutujas tabelmuutuja enda andmete põhjal.

Täiesti võimalik, SQL lause süntaks on järgmine

UPDATE @tas SET GroupStartDate = (SELECT MIN(Ta.TaskStartDate) FROM @tas Ta WHERE Ta.taskGroupId = [@tas].taskGroupId)


Kui vaja teha ühe tabelmuutuja UPDATE teiste tabelmuutujaga siis süntaks selline

UPDATE @korterid
SET re.loppsumma = ec.summa
FROM @korterid re INNER JOIN @lopparved AS ec
ON ( re.FLAT_ID = ec.FLAT_ID )

esmaspäev, 2. juuni 2008

Räsi SQL2005 jaoks

Kui vaja räsi tekitada, näiteks salasõna salvestamiseks

SELECT master.dbo.fn_varbintohexstr(HashBytes('SHA1', 'TiibetVabaks2010'))

muidugi on ilus, kui asi juba räsitult SQL-ini jõuaks
Blogged with the Flock Browser

Visual Studio 2008 Trial versioonist õige asja tegemine

Prooviversioonist õige versiooni tegemisel tuleb lihtsalt Product Key sisestada, mille leiad, kui paned selle õige ISO faili Daemon Toolsiga arvutile külge ning ronid kataloogi Setup ja sealt leiad faili setup.sdb ja sealt seest otsid Product Key ülesse.
Nüüd arvutil endal Install/Remove programs ja klõpsad Visual Studio 2008 peale ja
seal pead sama Product Key sisestama, mille tulemusena nagu endale lõpuks päris versiooni saad

Blogged with the Flock Browser

neljapäev, 15. mai 2008

SSIS Locale ID hädad Flat faili eksportimisel

Ehk tõmbame SQLSERVER 2005 andmebaasist salvestatud protseduuriga andmeid välja ja tahame tulemust panda tekstifaili
aga pillub siis sellist:

1. The Locale ID is not installed on this system
2. The component locale ID does not match the connection manager Locale ID

Põhjus selline, et Data Flow Taskis on Ole DB Source -> Properties LocaleID näiteks Estonian aga Flat faili Locale ID on näiteks English(United States) ja nüüd SSIS üritab andmeid tõmmata
Estonian -> English(United States) peale aga see talle kohe kuidagi ei meeldi.

Flat failil tuleb LocaleID panna sama, mis on Ole DB Source. Lihtsalt sellega, et muuda Flat file properties alt LocaleId ära ei pruugi õnnestuda. Kustuta olemasoleva Flat File connection ära ja Data Flow pealt ka minema ning lohista uus Flat file destination Data Flow peale. Ühenda OLE DB Sourcega ning loo Flat fail uuesti

Punkt 1 vastu rohtu ei ole otsinud, muud kui säti igal pool Locale ID English(United States), see on alati olemas.

Ahaa, andmebaasi SP-s, kui kasutad tabelmuutujat ja mingit fikseeritud tekstikonstanti siis ära unusta COLLATION DATABASE_DEFAULT kasutamast.

Näiteks kui SP-s salvestad midagi alguses tabelmuutujasse ja siis sealt pärast loed edasi näiteks:

DECLARE @paat TABLE ( nimi NVARCHAR(200) COLLATE DATABASE_DEFAULT, nr INT)
INSERT INTO @paat (nimi, nr) SELECT midagi, number FROM DBO.TABEL
ja kui nüüd sellest @paat tabelist edasi midagi loed näiteks:

SELECT nimi, CASE WHEN nr = 1 THE 'JAH' ELSE 'EI' END AS kuidas FROM @paat
siis "nimi" tuleb andmebaasi järjestuses (COLLATION) "kuidas" aga võetakse serveri oma ja
see SSIS-ile ka ei pruugi meeldida, tuleb seega järjestus ära määrata


SELECT nimi, CASE WHEN nr = 1 THE 'JAH' COLLATE DATABASE_DEFAULT ELSE 'EI' COLLATE DATABASE_DEFAULT END AS kuidas FROM @paat

Võid ühest hädast jälle lahti saada



Blogged with the Flock Browser

Visual Studio Workspace vahetus Team Foundation Serveril

Nii, juhtub, et kasutame ühte Team Foundation Serverit oma lähtekoodi hoidmiseks ja nüüd on see server läinud ja tahate oma kõvakettalt asjad teisele serverile hoidmiseks suunata. Aga kui hakkate Workspace muutma pistab kisama
a'la "The path C:\TURKU2008BI is already mapped in workspace VISUAL [http://visual:8080/].

Tuleb oma kõvakettalt otsida faili VersionControl.config, seal seotakse omavahel Workspace ja Server, ehk öeldakse, et C:\TURKU2008BI kataloog hoiab oma asju serveris http://visual:8080/" näiteks:


<ServerInfo uri="http://visual:8080/" repositoryGuid="bc34791c-d02c-4dce-a3f0-c328531a37ec">
<WorkspaceInfo name="VISUAL" ownerName="CW\Kuido" computer="VISTAU" comment="" LastSavedCheckinTimeStamp="0001-01-01T00:00:00Z">
<MappedPaths>
<MappedPath path="C:\TURKU2008BI" />
</MappedPaths>
</WorkspaceInfo>
</ServerInfo>

Ja nüüd sellele osale failist kadu
Blogged with the Flock Browser

Asjade algus

Asi algab sellest, et pea pole prügikast ja tihti on ette tulnud, et ei mäleta enam, kuidas mingit asja sai tehtud. Nüüd panen need kirja. Ehk on abiks.

Enna seda oli muidugi see, et hakkasin brauserina Flock'i kasutama, seal kõik need vidinad kohe käe-jala juures. Loodan, et Flock'iga ei lähe nagu Netscape-ga, et pillid lihtsalt kotti pannakse