i wanted to figure out a way to check whether failed or successful to update the operation as successfully or fails. it's simple all you have to do is read the exit code.
bcp.exe will return 1 if it fails, otherwise 0
Monday, August 20, 2007
Friday, August 10, 2007
C# Language Specification
C# Language Specification, Version 3.0 Available for Review
http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc
http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc
How to create a stagging table ?
special thanks to Robert W. Marda
sp_CreateAndExecTableScript 'InterfaceTree', '_stagging', 0 , 1
CREATE PROCEDURE spCOMMS_CreateStaggingTable
(@TableName varchar(255) = '',
@TableNameExt varchar(255) = '',
@DisplayScript bit = 0,
@Exec bit = 0,
@NoPK bit = 0,
@PKOnly bit = 0,
@NoIndexes bit = 0,
@NoTable bit = 0
)AS
SET NOCOUNT ON
--Begin invalid entries for parameters section
--Test for empty entry
IF @TableName = ''
BEGIN
PRINT '@TableName is a required parameter.'
RETURN 1
END
--Test for source table
IF NOT EXISTS (select * from sysobjects where id = object_id(N'[dbo].[' + @TableName + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
PRINT 'Table ' + @TableName + ' not found.'
RETURN 2
END
--End invalid entries for parameters section
DECLARE @Query varchar (8000),
@DFQuery varchar(8000)
SET @Query = ''
SET @DFQuery = ''
--Begin building datetime value to be used to ensure primary key and index names are unique
DECLARE @DateTime varchar(20)
DECLARE @rawDateTime varchar(20)
SET @rawdatetime = CURRENT_TIMESTAMP
SET @DateTime = SUBSTRING(@rawDateTime, 5, 2) + LEFT(@rawDateTime, 3) + SUBSTRING(@rawDateTime, 8, 4)
IF SUBSTRING(@rawDateTime, 13, 1) = ' '
SET @DateTime = @DateTime + SUBSTRING(@rawDateTime, 14, 1)
ELSE
SET @DateTime = @DateTime + SUBSTRING(@rawDateTime, 13, 2)
SET @DateTime = LTRIM(@DateTime) + '_' + SUBSTRING(@rawDateTime, 16, 4)
--End building datetime value
--Begin creating temp tables
--temp table #TableScript is used to gather data needed to generate script that will create the table
IF @NoTable = 0 AND @PKOnly = 0
CREATE TABLE #TableScript (
ColumnName varchar (30),
DataType varchar(40),
Length varchar(4),
[Precision] varchar(4),
Scale varchar(4),
IsNullable varchar(1),
TableName varchar(30),
ConstraintName varchar(255),
DefaultValue varchar (255),
GroupName varchar(35),
collation sysname NULL,
IdentityColumn bit NULL
)
--temp table #IndexScript is used to gather data needed to generate script that will create indexes for table
CREATE TABLE #IndexScript (
IndexName varchar (255),
IndId int,
ColumnName varchar (255),
IndKey int,
UniqueIndex int
)
--End creating temp tables
--Begin filling temp table #TableScript
IF @NoTable = 0 AND @PKOnly = 0
BEGIN
INSERT INTO #TableScript (ColumnName, DataType, Length, [Precision], Scale, IsNullable, TableName,
ConstraintName, DefaultValue, GroupName, collation, IdentityColumn)
SELECT LEFT(c.name,30) AS ColumnName,
LEFT(t.name,30) AS DataType,
CASE t.length
WHEN 8000 THEN c.prec --This criteria used because Enterprise Manager delivers the length in parenthesis for these datatypes when using its scripting capabilities.
ELSE NULL
END AS Length,
CASE t.name
WHEN 'numeric' THEN c.prec
WHEN 'decimal' THEN c.prec
ELSE NULL
END AS [Precision],
CASE t.name
WHEN 'numeric' THEN c.scale
WHEN 'decimal' THEN c.scale
ELSE NULL
END AS Scale,
c.isnullable,
LEFT(o.name,30) AS TableName,
d.name AS ConstraintName,
cm.text AS DefaultValue,
g1a.groupname,
c.collation,
CASE
WHEN c.autoval IS NULL THEN 0
ELSE 1
END AS IdentityColumn
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
LEFT JOIN systypes t ON t.xusertype = c.xusertype --the first three joins get column names, data types, and column nullability.
LEFT JOIN sysobjects d ON c.cdefault = d.id --this left join gets column default constraint names.
LEFT JOIN syscomments cm ON cm.id = d.id --this left join gets default values for default constraints.
LEFT JOIN sysindexes g1 ON g1.id = o.id --the left join for sysfilegroups and sysindexes with aliases g1 and g1a
LEFT JOIN sysfilegroups g1a ON g1.groupid = g1a.groupid --are for determining which file group the table is in.
WHERE o.name = @TableName
AND g1.id = o.id AND g1.indid in (0, 1) --these two conditions are to isolate the file group of the table.
END
--End filling temp table #TableScript
--Begin building create table and default value constraints scripts.
IF @NoTable = 0 AND @PKOnly = 0
BEGIN
SET @Query = 'if exists (select * from sysobjects where id = object_id(N' + '''[dbo].['
+ @TableName + @TableNameExt + ']''' + ') and OBJECTPROPERTY(id, N' + '''IsUserTable''' + ') = 1)'
+ CHAR(10) + 'drop table [dbo].[' + @TableName + @TableNameExt + ']'
+ CHAR(10) + 'GO'
+ CHAR(10) + CHAR(10) + 'CREATE TABLE [dbo].[' + @TableName + @TableNameExt + '] ('
DECLARE @DataType varchar(40),
@Length varchar(4),
@Precision varchar(4),
@Scale varchar(4),
@Isnullable varchar(1),
@DefaultValue varchar(255),
@GroupName varchar(35),
@ColumnName varchar(255),
@ConstraintName varchar(255),
@collation sysname,
@TEXTIMAGE_ON bit,
@IdentityColumn bit
SET @TEXTIMAGE_ON = 0
DECLARE ColumnName Cursor For
SELECT ColumnName
FROM #TableScript
OPEN ColumnName
FETCH NEXT FROM ColumnName INTO @ColumnName
WHILE (@@fetch_status = 0)
BEGIN
SELECT @DataType = DataType,
@Length = Length,
@Precision = [Precision],
@Scale = Scale,
@Isnullable = isnullable,
@DefaultValue = DefaultValue,
@ConstraintName = ConstraintName,
@collation = collation,
@IdentityColumn = IdentityColumn
FROM #TableScript
WHERE ColumnName = @ColumnName
IF @DefaultValue IS NOT NULL
BEGIN
IF @DFQuery = ''
SET @DFQuery = @DFQuery
+ CHAR(10) + CHAR(10) + 'ALTER TABLE [dbo].[' + @TableName + @TableNameExt + '] WITH NOCHECK ADD'
SET @DFQuery = @DFQuery
+ CHAR(10) + CHAR(9) + 'CONSTRAINT [DF_' + @TableName + @TableNameExt + '_'
+ @ColumnName + '_' + @DateTime + '] DEFAULT ' + @DefaultValue
+ ' FOR [' + @ColumnName + '],'
END
IF @DataType = 'text' OR @DataType = 'ntext'
SET @TEXTIMAGE_ON = 1
SET @Query = @Query
+ CHAR(10) + CHAR(9) + '[' + @ColumnName + '] [' + @DataType + ']'
IF @IdentityColumn = 1
SET @Query = @Query
+ ' IDENTITY (' + LTRIM(STR(IDENT_SEED(@TableName))) + ', ' + LTRIM(STR(IDENT_INCR(@TableName))) + ')'
IF @DataType = 'varchar' OR @DataType = 'nvarchar' OR @DataType = 'char' OR @DataType = 'nchar'
OR @DataType = 'varbinary' OR @DataType = 'binary'
SET @Query = @Query
+ ' (' + @Length + ')'
IF @DataType = 'numeric' OR @DataType = 'decimal'
SET @Query = @Query
+ ' (' + @Precision + ', ' + @Scale + ')'
IF @collation IS NOT NULL AND @DataType <> 'sysname' AND @DataType <> 'ProperName'
SET @Query = @Query
+ ' COLLATE ' + @collation
IF @Isnullable = '1'
SET @Query = @Query + ' NULL'
ELSE
SET @Query = @Query + ' NOT NULL'
FETCH NEXT FROM ColumnName INTO @ColumnName
IF @@fetch_status = 0
SET @Query = @Query + ', '
END
CLOSE ColumnName
DEALLOCATE ColumnName
SET @Query = @Query
+ CHAR(10) + ')'
--Assign file group name
SELECT DISTINCT @GroupName = GroupName
FROM #TableScript
IF @GroupName IS NOT NULL
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
IF @TEXTIMAGE_ON = 1
SET @Query = @Query
+ ' TEXTIMAGE_ON [' + @GroupName + ']'
IF RIGHT(@DFQuery,1) = ','
SET @DFQuery = LEFT(@DFQuery, LEN(@DFQuery) - 1)
SET @Query = @Query
+ CHAR(10) + 'GO'
END
--End building create table and default value constraints scripts.
--Begin filling temp table #IndexScript.
INSERT INTO #IndexScript (IndexName, IndId, ColumnName, IndKey, UniqueIndex)
SELECT i.name,
i.indid,
c.name,
k.keyno,
(i.status & 2) --Learned this will identify a unique index from sp_helpindex
FROM sysindexes i
INNER JOIN sysobjects o ON i.id = o.id
INNER JOIN sysindexkeys k ON i.id = k.id AND i.indid = k.indid
INNER JOIN syscolumns c ON c.id = k.id AND k.colid = c.colid
WHERE o.name = @TableName
AND i.indid > 0 and i.indid < 255 --eliminates non indexes
AND LEFT(i.name,7) <> '_WA_Sys' --eliminates statistic indexes
--End filling temp table #IndexScript.
DECLARE @PK varchar(2),
@IndID int,
@IndexName varchar(255),
@IndKey int
SET @PK = ''
SET @IndKey = 1
SELECT DISTINCT @IndexName = IndexName,
@IndID = indid
FROM #IndexScript
WHERE LEFT (IndexName, 2) = 'PK'
--Begin creating primary key script.
IF @PKOnly = 1 OR (@NoTable = 1 AND @NoPK = 0)
BEGIN
SET @Query = '--Add Primary Key' + CHAR(10)
SET @PK = 'PK'
END
IF @NoPK = 0
BEGIN
IF @IndexName IS NOT NULL
BEGIN
SET @Query = @Query
+ CHAR(10) + CHAR(10) + 'ALTER TABLE [dbo].[' + @TableName + @TableNameExt + '] WITH NOCHECK ADD'
+ CHAR(10) + 'CONSTRAINT [PK_' + @TableName + @TableNameExt + @PK + '_' + @DateTime + '] PRIMARY KEY '
IF @IndID = 1
SET @Query = @Query
+ 'CLUSTERED'
ELSE
SET @Query = @Query
+ 'NONCLUSTERED'
SET @Query = @Query
+ CHAR(10) + '('
DECLARE @OldColumnName varchar(255)
SET @OldColumnName = 'none_yet'
WHILE @IndKey <= 16
BEGIN
SELECT @ColumnName = ColumnName
FROM #IndexScript
WHERE IndexName = @IndexName AND IndID = @IndID AND IndKey = @IndKey
IF @ColumnName IS NOT NULL AND @ColumnName <> @OldColumnName
BEGIN
SET @Query = @Query
+ CHAR(10) + '[' + @ColumnName + '],'
END
SET @OldColumnName = @ColumnName
SET @IndKey = @IndKey + 1
END
IF RIGHT(@Query,1) = ','
SET @Query = LEFT(@Query, LEN(@Query) - 1)
SET @Query = @Query
+ CHAR(10) + ')'
--Add file group name
IF @GroupName is not null
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
SET @Query = @Query
+ CHAR(10) + 'GO'
END
END
--End creating primary key script.
--Add default value constraint script to main script.
IF @NoTable = 0 AND @PKOnly = 0
SET @Query = @Query
+ @DFQuery
+ CHAR(10) + 'GO'
--Begin building index script.
IF @NoIndexes = 0 AND @PKOnly = 0
BEGIN
IF @NoPK = 0
SET @Query = @Query
+ CHAR(10)
IF @NoTable = 1
SET @Query = @Query
+ '--Add Indexes' + CHAR(10)
ELSE
SET @Query = @Query
+ CHAR(10)
DECLARE @IndexNameOrig varchar(255),
@UniqueIndex int
DECLARE IndexName Cursor For
SELECT DISTINCT IndexName,
indid,
UniqueIndex
FROM #IndexScript
WHERE LEFT (IndexName, 2) <> 'PK' AND LEFT(IndexName, 4) <> 'hind'
OPEN IndexName
FETCH NEXT FROM IndexName INTO @IndexName, @IndID, @UniqueIndex
WHILE @@fetch_status = 0
BEGIN
SET @IndexNameOrig = @IndexName
IF RIGHT(@IndexName,2) = 'PM' OR RIGHT(@IndexName,2) = 'AM'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 5)
IF LEFT(RIGHT(@IndexName,10),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 10)
ELSE
IF LEFT(RIGHT(@IndexName,11),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 11)
ELSE
IF LEFT(RIGHT(@IndexName,12),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 12)
SET @Query = @Query
+ CHAR(10) + 'CREATE '
IF @IndID = 1
SET @Query = @Query
+ 'CLUSTERED '
IF @UniqueIndex <> 0
SET @Query = @Query
+ 'UNIQUE '
SET @Query = @Query
+ 'INDEX [' + @IndexName + '_' + @DateTime + '] ON [dbo].[' + @TableName + @TableNameExt + ']('
SET @IndKey = 1
SET @OldColumnName = 'none_yet'
WHILE @IndKey <= 16
BEGIN
SELECT @ColumnName = ColumnName
FROM #IndexScript
WHERE IndexName = @IndexNameOrig AND IndID = @IndID AND IndKey = @IndKey
IF @ColumnName IS NOT NULL AND @ColumnName <> @OldColumnName
BEGIN
SET @Query = @Query
+ '[' + @ColumnName + '],'
END
SET @OldColumnName = @ColumnName
SET @IndKey = @IndKey + 1
END
IF RIGHT(@Query,1) = ','
SET @Query = LEFT(@Query, LEN(@Query) - 1)
SET @Query = @Query + ')'
--Add file group name
IF @GroupName is not null
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
SET @Query = @Query
+ CHAR(10) + 'GO' + CHAR(10)
FETCH NEXT FROM IndexName INTO @IndexName, @IndID, @UniqueIndex
END
CLOSE IndexName
DEALLOCATE IndexName
END
--End building index script.
DROP TABLE #IndexScript
IF @NoTable = 0 AND @PKOnly = 0
DROP TABLE #TableScript
IF @DisplayScript = 1
PRINT @Query
IF @Exec = 1
BEGIN
--This code needed to remark out all GO commands before executing the code in the variable @Query
SET @Query = REPLACE(@Query,CHAR(10) + 'GO', CHAR(10) + '--GO')
Exec (@Query)
END
RETURN 0
GO
sp_CreateAndExecTableScript 'InterfaceTree', '_stagging', 0 , 1
CREATE PROCEDURE spCOMMS_CreateStaggingTable
(@TableName varchar(255) = '',
@TableNameExt varchar(255) = '',
@DisplayScript bit = 0,
@Exec bit = 0,
@NoPK bit = 0,
@PKOnly bit = 0,
@NoIndexes bit = 0,
@NoTable bit = 0
)AS
SET NOCOUNT ON
--Begin invalid entries for parameters section
--Test for empty entry
IF @TableName = ''
BEGIN
PRINT '@TableName is a required parameter.'
RETURN 1
END
--Test for source table
IF NOT EXISTS (select * from sysobjects where id = object_id(N'[dbo].[' + @TableName + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
PRINT 'Table ' + @TableName + ' not found.'
RETURN 2
END
--End invalid entries for parameters section
DECLARE @Query varchar (8000),
@DFQuery varchar(8000)
SET @Query = ''
SET @DFQuery = ''
--Begin building datetime value to be used to ensure primary key and index names are unique
DECLARE @DateTime varchar(20)
DECLARE @rawDateTime varchar(20)
SET @rawdatetime = CURRENT_TIMESTAMP
SET @DateTime = SUBSTRING(@rawDateTime, 5, 2) + LEFT(@rawDateTime, 3) + SUBSTRING(@rawDateTime, 8, 4)
IF SUBSTRING(@rawDateTime, 13, 1) = ' '
SET @DateTime = @DateTime + SUBSTRING(@rawDateTime, 14, 1)
ELSE
SET @DateTime = @DateTime + SUBSTRING(@rawDateTime, 13, 2)
SET @DateTime = LTRIM(@DateTime) + '_' + SUBSTRING(@rawDateTime, 16, 4)
--End building datetime value
--Begin creating temp tables
--temp table #TableScript is used to gather data needed to generate script that will create the table
IF @NoTable = 0 AND @PKOnly = 0
CREATE TABLE #TableScript (
ColumnName varchar (30),
DataType varchar(40),
Length varchar(4),
[Precision] varchar(4),
Scale varchar(4),
IsNullable varchar(1),
TableName varchar(30),
ConstraintName varchar(255),
DefaultValue varchar (255),
GroupName varchar(35),
collation sysname NULL,
IdentityColumn bit NULL
)
--temp table #IndexScript is used to gather data needed to generate script that will create indexes for table
CREATE TABLE #IndexScript (
IndexName varchar (255),
IndId int,
ColumnName varchar (255),
IndKey int,
UniqueIndex int
)
--End creating temp tables
--Begin filling temp table #TableScript
IF @NoTable = 0 AND @PKOnly = 0
BEGIN
INSERT INTO #TableScript (ColumnName, DataType, Length, [Precision], Scale, IsNullable, TableName,
ConstraintName, DefaultValue, GroupName, collation, IdentityColumn)
SELECT LEFT(c.name,30) AS ColumnName,
LEFT(t.name,30) AS DataType,
CASE t.length
WHEN 8000 THEN c.prec --This criteria used because Enterprise Manager delivers the length in parenthesis for these datatypes when using its scripting capabilities.
ELSE NULL
END AS Length,
CASE t.name
WHEN 'numeric' THEN c.prec
WHEN 'decimal' THEN c.prec
ELSE NULL
END AS [Precision],
CASE t.name
WHEN 'numeric' THEN c.scale
WHEN 'decimal' THEN c.scale
ELSE NULL
END AS Scale,
c.isnullable,
LEFT(o.name,30) AS TableName,
d.name AS ConstraintName,
cm.text AS DefaultValue,
g1a.groupname,
c.collation,
CASE
WHEN c.autoval IS NULL THEN 0
ELSE 1
END AS IdentityColumn
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
LEFT JOIN systypes t ON t.xusertype = c.xusertype --the first three joins get column names, data types, and column nullability.
LEFT JOIN sysobjects d ON c.cdefault = d.id --this left join gets column default constraint names.
LEFT JOIN syscomments cm ON cm.id = d.id --this left join gets default values for default constraints.
LEFT JOIN sysindexes g1 ON g1.id = o.id --the left join for sysfilegroups and sysindexes with aliases g1 and g1a
LEFT JOIN sysfilegroups g1a ON g1.groupid = g1a.groupid --are for determining which file group the table is in.
WHERE o.name = @TableName
AND g1.id = o.id AND g1.indid in (0, 1) --these two conditions are to isolate the file group of the table.
END
--End filling temp table #TableScript
--Begin building create table and default value constraints scripts.
IF @NoTable = 0 AND @PKOnly = 0
BEGIN
SET @Query = 'if exists (select * from sysobjects where id = object_id(N' + '''[dbo].['
+ @TableName + @TableNameExt + ']''' + ') and OBJECTPROPERTY(id, N' + '''IsUserTable''' + ') = 1)'
+ CHAR(10) + 'drop table [dbo].[' + @TableName + @TableNameExt + ']'
+ CHAR(10) + 'GO'
+ CHAR(10) + CHAR(10) + 'CREATE TABLE [dbo].[' + @TableName + @TableNameExt + '] ('
DECLARE @DataType varchar(40),
@Length varchar(4),
@Precision varchar(4),
@Scale varchar(4),
@Isnullable varchar(1),
@DefaultValue varchar(255),
@GroupName varchar(35),
@ColumnName varchar(255),
@ConstraintName varchar(255),
@collation sysname,
@TEXTIMAGE_ON bit,
@IdentityColumn bit
SET @TEXTIMAGE_ON = 0
DECLARE ColumnName Cursor For
SELECT ColumnName
FROM #TableScript
OPEN ColumnName
FETCH NEXT FROM ColumnName INTO @ColumnName
WHILE (@@fetch_status = 0)
BEGIN
SELECT @DataType = DataType,
@Length = Length,
@Precision = [Precision],
@Scale = Scale,
@Isnullable = isnullable,
@DefaultValue = DefaultValue,
@ConstraintName = ConstraintName,
@collation = collation,
@IdentityColumn = IdentityColumn
FROM #TableScript
WHERE ColumnName = @ColumnName
IF @DefaultValue IS NOT NULL
BEGIN
IF @DFQuery = ''
SET @DFQuery = @DFQuery
+ CHAR(10) + CHAR(10) + 'ALTER TABLE [dbo].[' + @TableName + @TableNameExt + '] WITH NOCHECK ADD'
SET @DFQuery = @DFQuery
+ CHAR(10) + CHAR(9) + 'CONSTRAINT [DF_' + @TableName + @TableNameExt + '_'
+ @ColumnName + '_' + @DateTime + '] DEFAULT ' + @DefaultValue
+ ' FOR [' + @ColumnName + '],'
END
IF @DataType = 'text' OR @DataType = 'ntext'
SET @TEXTIMAGE_ON = 1
SET @Query = @Query
+ CHAR(10) + CHAR(9) + '[' + @ColumnName + '] [' + @DataType + ']'
IF @IdentityColumn = 1
SET @Query = @Query
+ ' IDENTITY (' + LTRIM(STR(IDENT_SEED(@TableName))) + ', ' + LTRIM(STR(IDENT_INCR(@TableName))) + ')'
IF @DataType = 'varchar' OR @DataType = 'nvarchar' OR @DataType = 'char' OR @DataType = 'nchar'
OR @DataType = 'varbinary' OR @DataType = 'binary'
SET @Query = @Query
+ ' (' + @Length + ')'
IF @DataType = 'numeric' OR @DataType = 'decimal'
SET @Query = @Query
+ ' (' + @Precision + ', ' + @Scale + ')'
IF @collation IS NOT NULL AND @DataType <> 'sysname' AND @DataType <> 'ProperName'
SET @Query = @Query
+ ' COLLATE ' + @collation
IF @Isnullable = '1'
SET @Query = @Query + ' NULL'
ELSE
SET @Query = @Query + ' NOT NULL'
FETCH NEXT FROM ColumnName INTO @ColumnName
IF @@fetch_status = 0
SET @Query = @Query + ', '
END
CLOSE ColumnName
DEALLOCATE ColumnName
SET @Query = @Query
+ CHAR(10) + ')'
--Assign file group name
SELECT DISTINCT @GroupName = GroupName
FROM #TableScript
IF @GroupName IS NOT NULL
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
IF @TEXTIMAGE_ON = 1
SET @Query = @Query
+ ' TEXTIMAGE_ON [' + @GroupName + ']'
IF RIGHT(@DFQuery,1) = ','
SET @DFQuery = LEFT(@DFQuery, LEN(@DFQuery) - 1)
SET @Query = @Query
+ CHAR(10) + 'GO'
END
--End building create table and default value constraints scripts.
--Begin filling temp table #IndexScript.
INSERT INTO #IndexScript (IndexName, IndId, ColumnName, IndKey, UniqueIndex)
SELECT i.name,
i.indid,
c.name,
k.keyno,
(i.status & 2) --Learned this will identify a unique index from sp_helpindex
FROM sysindexes i
INNER JOIN sysobjects o ON i.id = o.id
INNER JOIN sysindexkeys k ON i.id = k.id AND i.indid = k.indid
INNER JOIN syscolumns c ON c.id = k.id AND k.colid = c.colid
WHERE o.name = @TableName
AND i.indid > 0 and i.indid < 255 --eliminates non indexes
AND LEFT(i.name,7) <> '_WA_Sys' --eliminates statistic indexes
--End filling temp table #IndexScript.
DECLARE @PK varchar(2),
@IndID int,
@IndexName varchar(255),
@IndKey int
SET @PK = ''
SET @IndKey = 1
SELECT DISTINCT @IndexName = IndexName,
@IndID = indid
FROM #IndexScript
WHERE LEFT (IndexName, 2) = 'PK'
--Begin creating primary key script.
IF @PKOnly = 1 OR (@NoTable = 1 AND @NoPK = 0)
BEGIN
SET @Query = '--Add Primary Key' + CHAR(10)
SET @PK = 'PK'
END
IF @NoPK = 0
BEGIN
IF @IndexName IS NOT NULL
BEGIN
SET @Query = @Query
+ CHAR(10) + CHAR(10) + 'ALTER TABLE [dbo].[' + @TableName + @TableNameExt + '] WITH NOCHECK ADD'
+ CHAR(10) + 'CONSTRAINT [PK_' + @TableName + @TableNameExt + @PK + '_' + @DateTime + '] PRIMARY KEY '
IF @IndID = 1
SET @Query = @Query
+ 'CLUSTERED'
ELSE
SET @Query = @Query
+ 'NONCLUSTERED'
SET @Query = @Query
+ CHAR(10) + '('
DECLARE @OldColumnName varchar(255)
SET @OldColumnName = 'none_yet'
WHILE @IndKey <= 16
BEGIN
SELECT @ColumnName = ColumnName
FROM #IndexScript
WHERE IndexName = @IndexName AND IndID = @IndID AND IndKey = @IndKey
IF @ColumnName IS NOT NULL AND @ColumnName <> @OldColumnName
BEGIN
SET @Query = @Query
+ CHAR(10) + '[' + @ColumnName + '],'
END
SET @OldColumnName = @ColumnName
SET @IndKey = @IndKey + 1
END
IF RIGHT(@Query,1) = ','
SET @Query = LEFT(@Query, LEN(@Query) - 1)
SET @Query = @Query
+ CHAR(10) + ')'
--Add file group name
IF @GroupName is not null
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
SET @Query = @Query
+ CHAR(10) + 'GO'
END
END
--End creating primary key script.
--Add default value constraint script to main script.
IF @NoTable = 0 AND @PKOnly = 0
SET @Query = @Query
+ @DFQuery
+ CHAR(10) + 'GO'
--Begin building index script.
IF @NoIndexes = 0 AND @PKOnly = 0
BEGIN
IF @NoPK = 0
SET @Query = @Query
+ CHAR(10)
IF @NoTable = 1
SET @Query = @Query
+ '--Add Indexes' + CHAR(10)
ELSE
SET @Query = @Query
+ CHAR(10)
DECLARE @IndexNameOrig varchar(255),
@UniqueIndex int
DECLARE IndexName Cursor For
SELECT DISTINCT IndexName,
indid,
UniqueIndex
FROM #IndexScript
WHERE LEFT (IndexName, 2) <> 'PK' AND LEFT(IndexName, 4) <> 'hind'
OPEN IndexName
FETCH NEXT FROM IndexName INTO @IndexName, @IndID, @UniqueIndex
WHILE @@fetch_status = 0
BEGIN
SET @IndexNameOrig = @IndexName
IF RIGHT(@IndexName,2) = 'PM' OR RIGHT(@IndexName,2) = 'AM'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 5)
IF LEFT(RIGHT(@IndexName,10),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 10)
ELSE
IF LEFT(RIGHT(@IndexName,11),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 11)
ELSE
IF LEFT(RIGHT(@IndexName,12),1) = '_'
SET @IndexName = LEFT(@IndexName, LEN(@IndexName) - 12)
SET @Query = @Query
+ CHAR(10) + 'CREATE '
IF @IndID = 1
SET @Query = @Query
+ 'CLUSTERED '
IF @UniqueIndex <> 0
SET @Query = @Query
+ 'UNIQUE '
SET @Query = @Query
+ 'INDEX [' + @IndexName + '_' + @DateTime + '] ON [dbo].[' + @TableName + @TableNameExt + ']('
SET @IndKey = 1
SET @OldColumnName = 'none_yet'
WHILE @IndKey <= 16
BEGIN
SELECT @ColumnName = ColumnName
FROM #IndexScript
WHERE IndexName = @IndexNameOrig AND IndID = @IndID AND IndKey = @IndKey
IF @ColumnName IS NOT NULL AND @ColumnName <> @OldColumnName
BEGIN
SET @Query = @Query
+ '[' + @ColumnName + '],'
END
SET @OldColumnName = @ColumnName
SET @IndKey = @IndKey + 1
END
IF RIGHT(@Query,1) = ','
SET @Query = LEFT(@Query, LEN(@Query) - 1)
SET @Query = @Query + ')'
--Add file group name
IF @GroupName is not null
SET @Query = @Query
+ ' ON [' + @GroupName + ']'
SET @Query = @Query
+ CHAR(10) + 'GO' + CHAR(10)
FETCH NEXT FROM IndexName INTO @IndexName, @IndID, @UniqueIndex
END
CLOSE IndexName
DEALLOCATE IndexName
END
--End building index script.
DROP TABLE #IndexScript
IF @NoTable = 0 AND @PKOnly = 0
DROP TABLE #TableScript
IF @DisplayScript = 1
PRINT @Query
IF @Exec = 1
BEGIN
--This code needed to remark out all GO commands before executing the code in the variable @Query
SET @Query = REPLACE(@Query,CHAR(10) + 'GO', CHAR(10) + '--GO')
Exec (@Query)
END
RETURN 0
GO
Monday, July 30, 2007
nice google search tip
Check this,
1. Go to Google
2. Click images
3. Type "flowers" or any other word.
4. You will get a page which is having full of images
5. Then delete the URL from the address bar and paste the below script
javascript:R= 0; x1=.1; y1=.05; x2=.25; y2=.24; x3= 1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI= document.images ; DIL=DI.length; function A(){for(i=0; i
1. Go to Google
2. Click images
3. Type "flowers" or any other word.
4. You will get a page which is having full of images
5. Then delete the URL from the address bar and paste the below script
javascript:R= 0; x1=.1; y1=.05; x2=.25; y2=.24; x3= 1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI= document.images ; DIL=DI.length; function A(){for(i=0; i
betting tips
If you are like me, here are some good betting tips.
Each of these factors has sub-factors, which further contribute to the rating assigned to each horse.
Horse
-Raw ability
-Distance form
-Ground form
-Maturity / Exposure
Jockey
-Weight
-Success individually
-Success with today's trainer
-Success at this course
Trainer
-percentage of winners in the last 6 months
-percentage of winners in the last 4weeks
-Success at this course
By quantifying these factors each with a different weighting dependant on importance - i.e. a 3rd in a Class C event is more valuable in terms of weighting than 3rd in a seller
The final stage for this product to identify the two selections that stand out, not necessarily those with the highest ratings, but those with the greatest percentage above the next best horse in their races.
Each of these factors has sub-factors, which further contribute to the rating assigned to each horse.
Horse
-Raw ability
-Distance form
-Ground form
-Maturity / Exposure
Jockey
-Weight
-Success individually
-Success with today's trainer
-Success at this course
Trainer
-percentage of winners in the last 6 months
-percentage of winners in the last 4weeks
-Success at this course
By quantifying these factors each with a different weighting dependant on importance - i.e. a 3rd in a Class C event is more valuable in terms of weighting than 3rd in a seller
The final stage for this product to identify the two selections that stand out, not necessarily those with the highest ratings, but those with the greatest percentage above the next best horse in their races.
Friday, July 27, 2007
BCS finally finished
when i was going back home y'day I was it was feeling so dull. when i went back home i saw the results letter from BCS and i knew that was it . i was expecting it from the day i sat for the exam. Finally now i am BCS graduate !!!. yap.. wish me luck. graduation ceremony on Nov 17th
Monday, July 23, 2007
extracting parameter from a url using C#
extracting parameter from a url using C#
where i am looking for key in the url.Query
Regex fileRegex = new Regex(@"^\?key=(?<1>[^&]*)$", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Match fileMatch = fileRegex.Match(Uri.UnescapeDataString(url.Query));
if (fileMatch.Success)
return fileMatch.Groups[1].Value;
where i am looking for key in the url.Query
Regex fileRegex = new Regex(@"^\?key=(?<1>[^&]*)$", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Match fileMatch = fileRegex.Match(Uri.UnescapeDataString(url.Query));
if (fileMatch.Success)
return fileMatch.Groups[1].Value;
Thursday, July 19, 2007
CurrentDeployment.UpdateLocation cached
i came up with a carzy bug last week, in OneClick deployment CurrentDeployment.UpdateLocation.AbsoluteUri always return a cached url ??? it passes first time passed parameters back again and again when you run the application . so always use the ApplicationDeployment.CurrentDeployment.ActivationUri insted of UpdateLocation.AbsoluteUri.
if you are getting a null issue in CurrentDeployment.ActivationUri that means you have not set the application publish->options allow parameters option
if you are getting a null issue in CurrentDeployment.ActivationUri that means you have not set the application publish->options allow parameters option
how to change the listview selected color ?
one of my colleges asked me that question and i though its the windows default selected color and you can't change it?? i did a google search for this nothing came up; so after spending serious amout of time i came up with this. million with sample where you can't find it anywhere else. this is a combination of a some russian , japanies coding..
=====================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace listviewsample
{
public partial class Form1 : Form
{
public static int WM_NOTIFY = 0x004E;
public static int NM_FIRST = 0- 0;
public static int NM_CUSTOMDRAW = NM_FIRST-12;
public static int CDRF_DODEFAULT = 0x00000000;
public static int CDRF_NEWFONT = 0x00000002;
public static int CDRF_SKIPDEFAULT = 0x00000004;
public static int CDRF_NOTIFYPOSTPAINT = 0x00000010;
public static int CDRF_NOTIFYITEMDRAW = 0x00000020;
public static int CDRF_NOTIFYSUBITEMDRAW = 0x00000020;
public static int CDRF_NOTIFYPOSTERASE = 0x00000040;
public static int CDIS_SELECTED = 0x0001;
public static int CDIS_FOCUS = 0x0010;
public static int CDDS_PREPAINT = 0x00000001;
public static int CDDS_POSTPAINT = 0x00000002;
public static int CDDS_PREERASE = 0x00000003;
public static int CDDS_POSTERASE = 0x00000004;
public static int CDDS_ITEM = 0x00010000;
public static int CDDS_ITEMPREPAINT = CDDS_ITEM | CDDS_PREPAINT;
public static int CDDS_ITEMPOSTPAINT = CDDS_ITEM | CDDS_POSTPAINT;
public static int CDDS_ITEMPREERASE = CDDS_ITEM | CDDS_PREERASE;
public static int CDDS_ITEMPOSTERASE = CDDS_ITEM | CDDS_POSTERASE;
public static int CDDS_SUBITEM = 0x00020000;
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMHDR
{
public int hwndFrom;
public int idFrom;
public int code;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMCUSTOMDRAWINFO
{
public NMHDR hdr;
public IntPtr dwDrawStage;
public IntPtr hdc;
public RECT rc;
public IntPtr dwItemSpec;
public uint uItemState;
public IntPtr lItemlParam;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMLVCUSTOMDRAW
{
public NMCUSTOMDRAWINFO nmcd;
public int clrText;
public int clrTextBk;
public int iSubItem;
}
protected override void WndProc(ref Message m)
{
if (m.Msg==WM_NOTIFY && m.WParam.Equals(listView1.Handle))
{
NMHDR nmhdr = (NMHDR)m.GetLParam(typeof(NMHDR));
if (nmhdr.code==NM_CUSTOMDRAW)
{
NMLVCUSTOMDRAW xCustomDraw =
(NMLVCUSTOMDRAW)m.GetLParam(typeof(NMLVCUSTOMDRAW) );
if
(listView1.SelectedIndices.IndexOf(xCustomDraw.nmcd.dwItemSpec.ToInt32())>-1
)
{
if ((xCustomDraw.nmcd.uItemState & CDIS_SELECTED)!=0)
{
xCustomDraw.nmcd.uItemState -= (uint)CDIS_SELECTED;
Marshal.StructureToPtr(xCustomDraw, m.LParam,
false);
}
if
(xCustomDraw.nmcd.dwDrawStage.ToInt32()==CDDS_PREPAINT)
{
m.Result = new IntPtr(CDRF_NOTIFYITEMDRAW);
return;
}
else if
(xCustomDraw.nmcd.dwDrawStage.ToInt32()==CDDS_ITEMPREPAINT)
{
xCustomDraw.clrText = ColorTranslator.ToWin32(Color.Blue);
xCustomDraw.clrTextBk = ((xCustomDraw.nmcd.uItemState & CDIS_FOCUS)!=0) ?
xCustomDraw.clrTextBk = ColorTranslator.ToWin32(Color.Yellow) :
xCustomDraw.clrTextBk = ColorTranslator.ToWin32(Color.Orange);
m.Result = new IntPtr(CDRF_NEWFONT);
Marshal.StructureToPtr(xCustomDraw, m.LParam,
false);
return;
}
}
}
}
base.WndProc(ref m);
}
public Form1()
{
InitializeComponent();
}
}
}
=====================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace listviewsample
{
public partial class Form1 : Form
{
public static int WM_NOTIFY = 0x004E;
public static int NM_FIRST = 0- 0;
public static int NM_CUSTOMDRAW = NM_FIRST-12;
public static int CDRF_DODEFAULT = 0x00000000;
public static int CDRF_NEWFONT = 0x00000002;
public static int CDRF_SKIPDEFAULT = 0x00000004;
public static int CDRF_NOTIFYPOSTPAINT = 0x00000010;
public static int CDRF_NOTIFYITEMDRAW = 0x00000020;
public static int CDRF_NOTIFYSUBITEMDRAW = 0x00000020;
public static int CDRF_NOTIFYPOSTERASE = 0x00000040;
public static int CDIS_SELECTED = 0x0001;
public static int CDIS_FOCUS = 0x0010;
public static int CDDS_PREPAINT = 0x00000001;
public static int CDDS_POSTPAINT = 0x00000002;
public static int CDDS_PREERASE = 0x00000003;
public static int CDDS_POSTERASE = 0x00000004;
public static int CDDS_ITEM = 0x00010000;
public static int CDDS_ITEMPREPAINT = CDDS_ITEM | CDDS_PREPAINT;
public static int CDDS_ITEMPOSTPAINT = CDDS_ITEM | CDDS_POSTPAINT;
public static int CDDS_ITEMPREERASE = CDDS_ITEM | CDDS_PREERASE;
public static int CDDS_ITEMPOSTERASE = CDDS_ITEM | CDDS_POSTERASE;
public static int CDDS_SUBITEM = 0x00020000;
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMHDR
{
public int hwndFrom;
public int idFrom;
public int code;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMCUSTOMDRAWINFO
{
public NMHDR hdr;
public IntPtr dwDrawStage;
public IntPtr hdc;
public RECT rc;
public IntPtr dwItemSpec;
public uint uItemState;
public IntPtr lItemlParam;
}
[StructLayout(LayoutKind.Sequential)]
public struct NMLVCUSTOMDRAW
{
public NMCUSTOMDRAWINFO nmcd;
public int clrText;
public int clrTextBk;
public int iSubItem;
}
protected override void WndProc(ref Message m)
{
if (m.Msg==WM_NOTIFY && m.WParam.Equals(listView1.Handle))
{
NMHDR nmhdr = (NMHDR)m.GetLParam(typeof(NMHDR));
if (nmhdr.code==NM_CUSTOMDRAW)
{
NMLVCUSTOMDRAW xCustomDraw =
(NMLVCUSTOMDRAW)m.GetLParam(typeof(NMLVCUSTOMDRAW) );
if
(listView1.SelectedIndices.IndexOf(xCustomDraw.nmcd.dwItemSpec.ToInt32())>-1
)
{
if ((xCustomDraw.nmcd.uItemState & CDIS_SELECTED)!=0)
{
xCustomDraw.nmcd.uItemState -= (uint)CDIS_SELECTED;
Marshal.StructureToPtr(xCustomDraw, m.LParam,
false);
}
if
(xCustomDraw.nmcd.dwDrawStage.ToInt32()==CDDS_PREPAINT)
{
m.Result = new IntPtr(CDRF_NOTIFYITEMDRAW);
return;
}
else if
(xCustomDraw.nmcd.dwDrawStage.ToInt32()==CDDS_ITEMPREPAINT)
{
xCustomDraw.clrText = ColorTranslator.ToWin32(Color.Blue);
xCustomDraw.clrTextBk = ((xCustomDraw.nmcd.uItemState & CDIS_FOCUS)!=0) ?
xCustomDraw.clrTextBk = ColorTranslator.ToWin32(Color.Yellow) :
xCustomDraw.clrTextBk = ColorTranslator.ToWin32(Color.Orange);
m.Result = new IntPtr(CDRF_NEWFONT);
Marshal.StructureToPtr(xCustomDraw, m.LParam,
false);
return;
}
}
}
}
base.WndProc(ref m);
}
public Form1()
{
InitializeComponent();
}
}
}
Tuesday, July 17, 2007
joke of the day !
- Gender Test ( funny )
- Important Test!
- Are you male or female??????
- To know the answer, look down...
-
-
-
-
-
-
-
-
-
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
- .
-
-
- NOT HERE... MY FRIEND
- I SAID LOOK DOWN....
- NOT SCROLL DOWN...
- @@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @
Monday, July 16, 2007
ActivationData is null??
just wanted to add this to my previous post..
if you get AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData = null then use ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri
if you get AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData = null then use ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri
parameter passing for oneclick installtion url
I have been involve in making our application web enable application for last 2 weeks and now a new requirement came to pass a parameter via the installation back to the application, i did a search on Google nothing much came out so i have post what i did so some one could benefit from it
1. go to project properties -> Publish
2. click on options and check "allow parameters to be pass to the url"
3. use this code snippet extract the parameter value,
4. eg http://www.hostname.com/sample.application?parameter=test
private static string parseParameters()
{
if (ApplicationDeployment.IsNetworkDeployed)
{
string[] activationData = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
if (activationData != null)
{
Uri url = new Uri(activationData[0]);
Regex fileRegex = new Regex(@"^\?parameter=(?<1>[^&]*)$",
RegexOptions.Singleline);
Match fileMatch = fileRegex.Match(Uri.UnescapeDataString(url.Query));
if (fileMatch.Success)
return fileMatch.Groups[1].Value;
}
}
else
{
return null;
}
}
1. go to project properties -> Publish
2. click on options and check "allow parameters to be pass to the url"
3. use this code snippet extract the parameter value,
4. eg http://www.hostname.com/sample.application?parameter=test
private static string parseParameters()
{
if (ApplicationDeployment.IsNetworkDeployed)
{
string[] activationData = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
if (activationData != null)
{
Uri url = new Uri(activationData[0]);
Regex fileRegex = new Regex(@"^\?parameter=(?<1>[^&]*)$",
RegexOptions.Singleline);
Match fileMatch = fileRegex.Match(Uri.UnescapeDataString(url.Query));
if (fileMatch.Success)
return fileMatch.Groups[1].Value;
}
}
else
{
return null;
}
}
Friday, June 29, 2007
Mihin Air Flyies to Thailand!
yeap this is some thing that i have been waiting for a long time !
http://www.mihinlanka.com/
http://www.mihinlanka.com/
Monday, June 25, 2007
Windows ListView with subitem images
i was assign to migrate our application (Richfocus) from freamwork 1.1 to 2.0. one portion which is using the listview control stoped working suddenly. all the program code works fine in 1.1 but not in 2.0. It was a extended version of the ListView to add images to it's sub items, finally i managed to fix the code by over writing with this code.
i have pasted the code here, so u might save some time.
using System;
using System.Runtime.InteropServices;
public class ListViewEx : System.Windows.Forms.ListView
{
private const int LVIF_IMAGE = 0x2;
private const int LVS_EX_SUBITEMIMAGES = 0x2;
private const int LVM_FIRST = 0x1000;
private const int LVM_GETITEMA = LVM_FIRST + 5;
private const int LVM_GETITEMW = LVM_FIRST + 75;
private static readonly int LVM_GETITEM = (Marshal.SystemDefaultCharSize
== 1) ? LVM_GETITEMA : LVM_GETITEMW;
private const int LVM_SETITEMA = LVM_FIRST + 6;
private const int LVM_SETITEMW = LVM_FIRST + 76;
private static readonly int LVM_SETITEM = (Marshal.SystemDefaultCharSize
== 1) ? LVM_SETITEMA : LVM_SETITEMW;
private const int LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr
wParam, ref LVITEM lParam);
[DllImport("User32.dll", CharSet=CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr
wParam, IntPtr lParam);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct LVITEM
{
public int mask;
public int iItem;
public int subItem;
public int state;
public int stateMask ;
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszText;
public int cchTextMax;
public int iImage;
public IntPtr lParam;
public int iIndent;
}
private bool ListView_SetItem(IntPtr hwnd, ref LVITEM lvi)
{
int result = SendMessage(hwnd, LVM_SETITEM, IntPtr.Zero, ref lvi);
return (result == 0) ? false : true;
}
private bool ListView_GetItem(IntPtr hwnd, ref LVITEM lvi)
{
int result = SendMessage(hwnd, LVM_GETITEM, IntPtr.Zero, ref lvi);
return (result == 0) ? false : true;
}
private void ListView_SetExtendedListViewStyleEx(IntPtr hwnd, int mask,
int style)
{
SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, new IntPtr(mask),
new IntPtr(style));
}
private void ListView_SetSubItemImageIndex(IntPtr hwnd, int index, int
subItemIndex, int imageIndex)
{
LVITEM lvi = new LVITEM();
lvi.iItem = index;
lvi.subItem = subItemIndex;
lvi.iImage = imageIndex;
lvi.mask = LVIF_IMAGE;
ListView_SetItem(hwnd, ref lvi);
}
private int ListView_GetSubItemImageIndex(IntPtr hwnd, int index, int
subItemIndex)
{
LVITEM lvi = new LVITEM();
lvi.iItem = index;
lvi.subItem = subItemIndex;
lvi.mask = LVIF_IMAGE;
if (ListView_GetItem(hwnd, ref lvi))
return lvi.iImage;
else
return -1;
}
protected override void OnCreateControl()
{
base.OnCreateControl();
ListView_SetExtendedListViewStyleEx(this.Handle,
LVS_EX_SUBITEMIMAGES, LVS_EX_SUBITEMIMAGES);
}
public void SetSubItemImageIndex(int index, int subItemIndex, int
imageIndex)
{
ListView_SetSubItemImageIndex(this.Handle, index, subItemIndex,
imageIndex);
}
public int GetSubItemImageIndex(int index, int subItemIndex)
{
return ListView_GetSubItemImageIndex(this.Handle, index,
subItemIndex);
}
}
i have pasted the code here, so u might save some time.
using System;
using System.Runtime.InteropServices;
public class ListViewEx : System.Windows.Forms.ListView
{
private const int LVIF_IMAGE = 0x2;
private const int LVS_EX_SUBITEMIMAGES = 0x2;
private const int LVM_FIRST = 0x1000;
private const int LVM_GETITEMA = LVM_FIRST + 5;
private const int LVM_GETITEMW = LVM_FIRST + 75;
private static readonly int LVM_GETITEM = (Marshal.SystemDefaultCharSize
== 1) ? LVM_GETITEMA : LVM_GETITEMW;
private const int LVM_SETITEMA = LVM_FIRST + 6;
private const int LVM_SETITEMW = LVM_FIRST + 76;
private static readonly int LVM_SETITEM = (Marshal.SystemDefaultCharSize
== 1) ? LVM_SETITEMA : LVM_SETITEMW;
private const int LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr
wParam, ref LVITEM lParam);
[DllImport("User32.dll", CharSet=CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr
wParam, IntPtr lParam);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct LVITEM
{
public int mask;
public int iItem;
public int subItem;
public int state;
public int stateMask ;
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszText;
public int cchTextMax;
public int iImage;
public IntPtr lParam;
public int iIndent;
}
private bool ListView_SetItem(IntPtr hwnd, ref LVITEM lvi)
{
int result = SendMessage(hwnd, LVM_SETITEM, IntPtr.Zero, ref lvi);
return (result == 0) ? false : true;
}
private bool ListView_GetItem(IntPtr hwnd, ref LVITEM lvi)
{
int result = SendMessage(hwnd, LVM_GETITEM, IntPtr.Zero, ref lvi);
return (result == 0) ? false : true;
}
private void ListView_SetExtendedListViewStyleEx(IntPtr hwnd, int mask,
int style)
{
SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, new IntPtr(mask),
new IntPtr(style));
}
private void ListView_SetSubItemImageIndex(IntPtr hwnd, int index, int
subItemIndex, int imageIndex)
{
LVITEM lvi = new LVITEM();
lvi.iItem = index;
lvi.subItem = subItemIndex;
lvi.iImage = imageIndex;
lvi.mask = LVIF_IMAGE;
ListView_SetItem(hwnd, ref lvi);
}
private int ListView_GetSubItemImageIndex(IntPtr hwnd, int index, int
subItemIndex)
{
LVITEM lvi = new LVITEM();
lvi.iItem = index;
lvi.subItem = subItemIndex;
lvi.mask = LVIF_IMAGE;
if (ListView_GetItem(hwnd, ref lvi))
return lvi.iImage;
else
return -1;
}
protected override void OnCreateControl()
{
base.OnCreateControl();
ListView_SetExtendedListViewStyleEx(this.Handle,
LVS_EX_SUBITEMIMAGES, LVS_EX_SUBITEMIMAGES);
}
public void SetSubItemImageIndex(int index, int subItemIndex, int
imageIndex)
{
ListView_SetSubItemImageIndex(this.Handle, index, subItemIndex,
imageIndex);
}
public int GetSubItemImageIndex(int index, int subItemIndex)
{
return ListView_GetSubItemImageIndex(this.Handle, index,
subItemIndex);
}
}
Where is WMSDefine namespace in SP2 ?
I was working on a windows media service plug-in for my bro. When i installed it in Windows |Server 2003 standard version PC it didn't work because custom plug-in doesn't support in Windows 2003 stranded version either :) dammm
So I moved everything i had in to a 64 bit Windows Sever 2003 SP2 PC. nothing worked. i looked over and over thu a stupid error code in Google and didn't help it either.
So i compiled everything on top of Windows Freamwork 2.0, now WMSDefine enum is missing in the latest windowsmediaservice.dll ahh frustrating.. so i reflector to copy the WMSDefined class from 1.1 to my project and it worked.
simply this is why i dont like MS,
Friday, June 01, 2007
Auto Size Columns in the DataGrid ?
do u want to Auto Size Columns in the DataGrid ? here is the code
Public Sub AutoSizeGrid(ByVal Grid As DataGrid)
Try
Dim t As Type = grdInfo.GetType
Dim m As MethodInfo = t.GetMethod("ColAutoResize", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Dim start As Integer
start = grdInfo.FirstVisibleColumn
Dim i As Integer = 0
While i < grdInfo.VisibleColumnCount OrElse i = 0
m.Invoke(Grid, New Object() {i + start})
i = i + 1
End While
Catch ex As Exception
m_parentForm.imcMessege.LogErrorMessage(Me, ex)
End Try
End Sub
Public Sub AutoSizeGrid(ByVal Grid As DataGrid)
Try
Dim t As Type = grdInfo.GetType
Dim m As MethodInfo = t.GetMethod("ColAutoResize", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Dim start As Integer
start = grdInfo.FirstVisibleColumn
Dim i As Integer = 0
While i < grdInfo.VisibleColumnCount OrElse i = 0
m.Invoke(Grid, New Object() {i + start})
i = i + 1
End While
Catch ex As Exception
m_parentForm.imcMessege.LogErrorMessage(Me, ex)
End Try
End Sub
need a combobox in DataGrid ?
I having been tring to add a combobox to the datagrid. here is da code
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Diagnostics;
// Derive class from DataGridTextBoxColumn
public class DataGridComboBoxColumn : DataGridTextBoxColumn
{
// Hosted ComboBox control
private ComboBox comboBox;
private CurrencyManager cm;
private int iCurrentRow;
// Constructor - create combobox, register selection change event handler,
// register lose focus event handler
public DataGridComboBoxColumn()
{
this.cm = null;
// Create ComboBox and force DropDownList style
this.comboBox = new ComboBox();
this.comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
// Add event handler for notification of when ComboBox loses focus
this.comboBox.Leave += new EventHandler(comboBox_Leave);
}
// Property to provide access to ComboBox
public ComboBox ComboBox
{
get { return comboBox; }
}
// On edit, add scroll event handler, and display combo box
protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
Debug.WriteLine(String.Format("Edit {0}", rowNum));
base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
if (!readOnly && cellIsVisible)
{
// Save current row in the datagrid and currency manager associated with
// the data source for the datagrid
this.iCurrentRow = rowNum;
this.cm = source;
// Add event handler for datagrid scroll notification
this.DataGridTableStyle.DataGrid.Scroll += new EventHandler(DataGrid_Scroll);
// Site the combo box control within the bounds of the current cell
this.comboBox.Parent = this.TextBox.Parent;
Rectangle rect = this.DataGridTableStyle.DataGrid.GetCurrentCellBounds();
this.comboBox.Location = rect.Location;
this.comboBox.Size = new Size(this.TextBox.Size.Width, this.comboBox.Size.Height);
// Set combo box selection to given text
this.comboBox.SelectedIndex = this.comboBox.FindStringExact(this.TextBox.Text);
// Make the ComboBox visible and place on top text box control
this.comboBox.Show();
this.comboBox.BringToFront();
this.comboBox.Focus();
}
}
// Given a row, get the value member associated with a row. Use the value
// member to find the associated display member by iterating over bound datasource
protected override object GetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum)
{
if(this.comboBox.DataSource == null) return null;
Debug.WriteLine(String.Format("GetColumnValueAtRow {0}", rowNum));
// Given a row number in the datagrid, get the display member
object obj = base.GetColumnValueAtRow(source, rowNum);
// Iterate through the datasource bound to the ColumnComboBox
// Don't confuse this datasource with the datasource of the associated datagrid
CurrencyManager cm = (CurrencyManager) (this.DataGridTableStyle.DataGrid.BindingContext[this.comboBox.DataSource]);
// Assumes the associated DataGrid is bound to a DataView, or DataTable that
// implements a default DataView
DataView dataview = ((DataView)cm.List);
int i;
for (i = 0; i < dataview.Count; i++)
{
if (obj.Equals(dataview[i][this.comboBox.ValueMember]))
break;
}
if (i < dataview.Count)
return dataview[i][this.comboBox.DisplayMember];
return DBNull.Value;
}
// Given a row and a display member, iterating over bound datasource to find
// the associated value member. Set this value member.
protected override void SetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum, object value)
{
Debug.WriteLine(String.Format("SetColumnValueAtRow {0} {1}", rowNum, value));
object s = value;
// Iterate through the datasource bound to the ColumnComboBox
// Don't confuse this datasource with the datasource of the associated datagrid
CurrencyManager cm = (CurrencyManager)
(this.DataGridTableStyle.DataGrid.BindingContext[this.comboBox.DataSource]);
// Assumes the associated DataGrid is bound to a DataView, or DataTable that
// implements a default DataView
DataView dataview = ((DataView)cm.List);
int i;
for (i = 0; i < dataview.Count; i++)
{
if (s.Equals(dataview[i][this.comboBox.DisplayMember]))
break;
}
// If set item was found return corresponding value, otherwise return DbNull.Value
if(i < dataview.Count)
s = dataview[i][this.comboBox.ValueMember];
else
s = DBNull.Value;
base.SetColumnValueAtRow(source, rowNum, s);
}
// On datagrid scroll, hide the combobox
private void DataGrid_Scroll(object sender, EventArgs e)
{
Debug.WriteLine("Scroll");
this.comboBox.Hide();
}
// On combo box losing focus, set the column value, hide the combo box,
// and unregister scroll event handler
private void comboBox_Leave(object sender, EventArgs e)
{
try
{
if(this.comboBox.DisplayMember == "")
{
this.comboBox.Hide();
return;
}
if(this.comboBox.SelectedItem == null)
{
this.comboBox.Hide();
return;
}
DataRowView rowView = (DataRowView) this.comboBox.SelectedItem;
string s = (string) rowView.Row[this.comboBox.DisplayMember];
Debug.WriteLine(String.Format("Leave: {0} {1}", this.comboBox.Text, s));
SetColumnValueAtRow(this.cm, this.iCurrentRow, s);
Invalidate();
this.comboBox.Hide();
this.DataGridTableStyle.DataGrid.Scroll -= new EventHandler(DataGrid_Scroll);
}
finally
{
this.comboBox.Hide();
}
}
}
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Diagnostics;
// Derive class from DataGridTextBoxColumn
public class DataGridComboBoxColumn : DataGridTextBoxColumn
{
// Hosted ComboBox control
private ComboBox comboBox;
private CurrencyManager cm;
private int iCurrentRow;
// Constructor - create combobox, register selection change event handler,
// register lose focus event handler
public DataGridComboBoxColumn()
{
this.cm = null;
// Create ComboBox and force DropDownList style
this.comboBox = new ComboBox();
this.comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
// Add event handler for notification of when ComboBox loses focus
this.comboBox.Leave += new EventHandler(comboBox_Leave);
}
// Property to provide access to ComboBox
public ComboBox ComboBox
{
get { return comboBox; }
}
// On edit, add scroll event handler, and display combo box
protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
Debug.WriteLine(String.Format("Edit {0}", rowNum));
base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
if (!readOnly && cellIsVisible)
{
// Save current row in the datagrid and currency manager associated with
// the data source for the datagrid
this.iCurrentRow = rowNum;
this.cm = source;
// Add event handler for datagrid scroll notification
this.DataGridTableStyle.DataGrid.Scroll += new EventHandler(DataGrid_Scroll);
// Site the combo box control within the bounds of the current cell
this.comboBox.Parent = this.TextBox.Parent;
Rectangle rect = this.DataGridTableStyle.DataGrid.GetCurrentCellBounds();
this.comboBox.Location = rect.Location;
this.comboBox.Size = new Size(this.TextBox.Size.Width, this.comboBox.Size.Height);
// Set combo box selection to given text
this.comboBox.SelectedIndex = this.comboBox.FindStringExact(this.TextBox.Text);
// Make the ComboBox visible and place on top text box control
this.comboBox.Show();
this.comboBox.BringToFront();
this.comboBox.Focus();
}
}
// Given a row, get the value member associated with a row. Use the value
// member to find the associated display member by iterating over bound datasource
protected override object GetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum)
{
if(this.comboBox.DataSource == null) return null;
Debug.WriteLine(String.Format("GetColumnValueAtRow {0}", rowNum));
// Given a row number in the datagrid, get the display member
object obj = base.GetColumnValueAtRow(source, rowNum);
// Iterate through the datasource bound to the ColumnComboBox
// Don't confuse this datasource with the datasource of the associated datagrid
CurrencyManager cm = (CurrencyManager) (this.DataGridTableStyle.DataGrid.BindingContext[this.comboBox.DataSource]);
// Assumes the associated DataGrid is bound to a DataView, or DataTable that
// implements a default DataView
DataView dataview = ((DataView)cm.List);
int i;
for (i = 0; i < dataview.Count; i++)
{
if (obj.Equals(dataview[i][this.comboBox.ValueMember]))
break;
}
if (i < dataview.Count)
return dataview[i][this.comboBox.DisplayMember];
return DBNull.Value;
}
// Given a row and a display member, iterating over bound datasource to find
// the associated value member. Set this value member.
protected override void SetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum, object value)
{
Debug.WriteLine(String.Format("SetColumnValueAtRow {0} {1}", rowNum, value));
object s = value;
// Iterate through the datasource bound to the ColumnComboBox
// Don't confuse this datasource with the datasource of the associated datagrid
CurrencyManager cm = (CurrencyManager)
(this.DataGridTableStyle.DataGrid.BindingContext[this.comboBox.DataSource]);
// Assumes the associated DataGrid is bound to a DataView, or DataTable that
// implements a default DataView
DataView dataview = ((DataView)cm.List);
int i;
for (i = 0; i < dataview.Count; i++)
{
if (s.Equals(dataview[i][this.comboBox.DisplayMember]))
break;
}
// If set item was found return corresponding value, otherwise return DbNull.Value
if(i < dataview.Count)
s = dataview[i][this.comboBox.ValueMember];
else
s = DBNull.Value;
base.SetColumnValueAtRow(source, rowNum, s);
}
// On datagrid scroll, hide the combobox
private void DataGrid_Scroll(object sender, EventArgs e)
{
Debug.WriteLine("Scroll");
this.comboBox.Hide();
}
// On combo box losing focus, set the column value, hide the combo box,
// and unregister scroll event handler
private void comboBox_Leave(object sender, EventArgs e)
{
try
{
if(this.comboBox.DisplayMember == "")
{
this.comboBox.Hide();
return;
}
if(this.comboBox.SelectedItem == null)
{
this.comboBox.Hide();
return;
}
DataRowView rowView = (DataRowView) this.comboBox.SelectedItem;
string s = (string) rowView.Row[this.comboBox.DisplayMember];
Debug.WriteLine(String.Format("Leave: {0} {1}", this.comboBox.Text, s));
SetColumnValueAtRow(this.cm, this.iCurrentRow, s);
Invalidate();
this.comboBox.Hide();
this.DataGridTableStyle.DataGrid.Scroll -= new EventHandler(DataGrid_Scroll);
}
finally
{
this.comboBox.Hide();
}
}
}
Friday, March 23, 2007
Company of Heros
Last couple of day I spent fixing Sales Order issues in order to go live so it was a bit busy for me. Now I feel boring since not much of work and also guy used to sit next to me "Wasantha" has gone to duabi to support the implementation.
When I was in thailand I bought a game named "Company of Heros" which happed to be the last year best startagic game. Now I am addicted to it. I intalled it in my bros computer and it worked with out any problems and i managed to complete 4 levels of the game spending ,night and cutting class. When i installed it in my laptop it starts giving problems, I can;t see soilders so i installed patches drivers nothing seems to be working.
just waitting till some mirecal happens for me to play the game on my laptop..
i also asked pitta to check my kendare. Hope it will same some thing good about the game :) even tho i am not beliving in god and stuff this is the time i tend to think about
When I was in thailand I bought a game named "Company of Heros" which happed to be the last year best startagic game. Now I am addicted to it. I intalled it in my bros computer and it worked with out any problems and i managed to complete 4 levels of the game spending ,night and cutting class. When i installed it in my laptop it starts giving problems, I can;t see soilders so i installed patches drivers nothing seems to be working.
just waitting till some mirecal happens for me to play the game on my laptop..
i also asked pitta to check my kendare. Hope it will same some thing good about the game :) even tho i am not beliving in god and stuff this is the time i tend to think about
Thursday, March 08, 2007
SQL Server Transaction Log Reader
it's lumigent's log reader. it can read the database transaction log.
http://www.lumigent.com/downloads/
http://www.lumigent.com/downloads/
Monday, March 05, 2007
Error 75 File Path Access Error On Windows 2003
One of our programs stoped working on windows 2003, same setup is working on 2000 like suger. it was writting using VB6. it trows a File Copy Error 75 when you try to copy a file to a shared folder on windows 2003. answer is simple By Default Windows 2003 gives only Read-Only rights for shared folders since virues used to copy files to shared folders.
so i kept a not so you dont have to go thur what we did
so i kept a not so you dont have to go thur what we did
Subscribe to:
Posts (Atom)