Posts
394
Comments
124
Trackbacks
0
December 2010 Entries
Christmas 2.0


 
 
posted @ Saturday, December 18, 2010 6:53 PM | Feedback (0)
Kostenlos: eBook zur Windows Phone 7-Programmierung

WindowsPhone7 

Bei msdn ist ein Buch zur Programmierung von Windows Phone 7 erschienen, dieses ca. 1000 Seiten umfassende Buch kann man in der englischen Version kostenlos als eBook herunterladen:

http://www.microsoft.com/germany/msdn/aktuell/news/show.mspx?id=msdn_de_41977

posted @ Monday, December 13, 2010 7:47 PM | Feedback (2)
Das Ergebnis einer LinQ to SQL Abfrage nachträglich sortieren

Neulich hatte ich eine LINQ to SQL Abfrage welche nach einem ermittelten Wert sortiert werden sollte, normalerweise macht man dies mit Order By innerhalb der LinQ Abfrage. In meiner Aufgabenstellung (die LinQ-Abfrage war komplex) funktionierte dies nicht.

Dann boten sich die folgende Lösung an:

Dim ret as new Object

ret = (From status In tableStatus _

       Select status.STATUS_ID, _

       Text = Function_GetText(status.TEXT_ID) _

       ).toList.OrderBy(Function(a) a.Text)


oder andere Variante:

Dim tmp = From status In tableStatus _
          
Select status.STATUS_ID, _

          Text = Function_GetText(status.TEXT_ID)

Dim ret = (From x In tmp Order By x. Text Select x

posted @ Wednesday, December 08, 2010 7:37 PM | Feedback (0)
Eine Datenbank um Mandantenfähigkeit erweitern

Manchmal kommt es vor, dass eine bestehende produktive Software für die Nutzung durch mehrere Mandanten oder Kunden erweitert werden soll.

Als „Mandantenfähigkeit” bezeichnet man die Eigenschaft einer Software, auf einer Installation mehrere voneinander vollständig getrennte Mandanten/Kunden abzubilden. Die jeweiligen Mandanten nutzen hierbei die gleiche Programmlogik und -funktionen, haben aber jeweils eine eigene Datenbasis und können die Daten der anderen Mandanten nicht einsehen.

Hier ein Beispiel SQL-Skript welches eine Tabelle Mandanten anlegt und alle vorhandenen Tabellen um eine Spalte Mandanten_ID erweitert und einen foreign-key auf die Tabelle Mandanten setzt:

DECLARE @MandantTabelle nvarchar(200)
SET @MandantTabelle = '_Mandanten'
DECLARE @statement nvarchar(4000)
DECLARE @MandantID nvarchar(200)
SET @MandantID = 'Mandant_ID'
DECLARE @NameFK nvarchar(200)
 

-- zuerst Mandaten-Tabelle anlegen
IF NOT EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=@MandantTabelle )
      BEGIN
            set @statement = N'
                  CREATE TABLE [dbo].[_Mandanten](
                        [MANDANT_ID] [int] NOT NULL,
                        [Name] [nvarchar](100) NULL,
                        [Bemerkung] [nvarchar](max) NULL,
                        [LastMod] [datetime] NULL,
                        [LastUser] [nvarchar](50) NULL,
                   CONSTRAINT [PK__Mandanten] PRIMARY KEY CLUSTERED 
                  (
                        [MANDANT_ID] ASC
                  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
                  ) ON [PRIMARY]'
            EXECUTE sp_executesql @statement 
            PRINT 'Die Tabelle ' + @MandantTabelle +' war nicht vorhanden, wurde angelegt'
      END
ELSE
      PRINT 'Die Tabelle ' + @MandantTabelle +' ist bereits vorhanden'

PRINT ' '


-- in alle Tabellen das Feld MandantenID hinzufügen (wenn nicht vorhanden)
-- und einen foreign key auf die Tabelle Mandant setzen (wenn nicht vorhanden) 
SET NOCOUNT ON

PRINT 'alle Tabellen um die Spalte ' + @MandantID + ' erweitern:'
PRINT 'Start:  ' + convert(varchar, current_timestamp, 121)
PRINT ' ' 

DECLARE @curTabellen CURSOR
DECLARE @tabelle nvarchar(200) 

SET @curTabellen = CURSOR FOR
      SELECT TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES 
       WHERE (TABLE_NAME NOT IN ('dtproperties', 'sysdiagrams','_Mandanten','grant_definition')) AND (TABLE_TYPE = 'BASE TABLE')
       ORDER BY TABLE_NAME     

OPEN @curTabellen
FETCH NEXT FROM @curTabellen INTO @tabelle 

WHILE @@FETCH_STATUS = 0
BEGIN

      PRINT @tabelle 

      -- Wenn Feld MandantID nicht vorhanden, dann anlegen (wenn nicht vorhanden)
      If NOT Exists 
      (Select * From Information_Schema.Columns Where Table_Name = @tabelle And Column_Name = @MandantID) 
            BEGIN
                  SET @statement = N'ALTER TABLE ' + @tabelle + ' ADD ' + @MandantID + ' INT'
                  EXECUTE sp_executesql @statement 
                  print '- Feld ' + @MandantID + ' war nicht vorhanden, wurde angelegt' 
            END
      ELSE
            PRINT '- Feld ' + @MandantID + ' ist bereits vorhanden'

  

      -- foreign key auf die Tabelle _Mandant setzen (wenn nicht vorhanden)
      SET  @NameFK = 'FK_' + @tabelle + '_' + @MandantTabelle

      If NOT Exists 
      (SELECT * FROM Information_Schema.CONSTRAINT_COLUMN_USAGE
      WHERE TABLE_NAME = @tabelle and CONSTRAINT_NAME=@NameFK)
            BEGIN 

                  SET @statement = N'ALTER TABLE ' + @tabelle + '  
                        WITH CHECK ADD  CONSTRAINT [' + @NameFK + '] 
                        FOREIGN KEY([' + @MandantID + '])
                        REFERENCES [dbo].[' + @MandantTabelle + '] ([' + @MandantID + '])'
                  EXECUTE sp_executesql @statement 

                  Print '- FK zur Tabelle ' + @MandantTabelle + ' war nicht vorhanden, wurde angelegt'
            END
      ELSE
            Print '- FK zur Tabelle ' + @MandantTabelle + ' ist bereits vorhanden'

      PRINT ' '
      FETCH NEXT

      FROM @curTabellen INTO @tabelle

END

CLOSE @curTabellen
DEALLOCATE @curTabellen 

PRINT 'Ende'
SET NOCOUNT OFF
 

posted @ Thursday, December 02, 2010 10:21 AM | Feedback (0)