Sunday, 30 September 2012

SQL Procedure to encrypt and decrypt sensitive data.


To be honest, this procedure was not written by me.
I found it on a website. (I really can't remember its site' s name. really sorry for that.)
Let me share again and thank you the owner of this procedure.

password with encyption
_____________________
ALTER PROCEDURE [dbo].[Encrypt_PW]
AS
    --CREATE SYMMETRIC KEY EncyptKey

    --WITH ALGORITHM = TRIPLE_DES

    --ENCRYPTION BY PASSWORD = '1234'

    --UPDATE LOGIN USE PASSWORDS WITH ENCRYPTON


    UPDATE Staff SET PW = dbo.fnEncDecRc4('tester', '1234')
    WHERE LOGINID = 'test'


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Decryption the encrypted passwords
______________________________

USE [test]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnEncDecRc4]
(
    @Pwd VARCHAR(256),
    @Text VARCHAR(8000)
)
RETURNS    VARCHAR(8000)
AS

BEGIN
    DECLARE    @Box TABLE (i TINYINT, v TINYINT)

    INSERT    @Box
        (
            i,
            v
        )
    SELECT    i,
        v
    FROM    dbo.fnInitRc4(@Pwd)

    DECLARE    @Index SMALLINT,
        @i SMALLINT,
        @j SMALLINT,
        @t TINYINT,
        @k SMALLINT,
              @CipherBy TINYINT,
              @Cipher VARCHAR(8000)

    SELECT    @Index = 1,
        @i = 0,
        @j = 0,
        @Cipher = ''

    WHILE @Index <= DATALENGTH(@Text)
        BEGIN
            SELECT    @i = (@i + 1) % 256

            SELECT    @j = (@j + b.v) % 256
            FROM    @Box b
            WHERE    b.i = @i

            SELECT    @t = v
            FROM    @Box
            WHERE    i = @i

            UPDATE    b
            SET    b.v = (SELECT w.v FROM @Box w WHERE w.i = @j)
            FROM    @Box b
            WHERE    b.i = @i

            UPDATE    @Box
            SET    v = @t
            WHERE    i = @j

            SELECT    @k = v
            FROM    @Box
            WHERE    i = @i

            SELECT    @k = (@k + v) % 256
            FROM    @Box
            WHERE    i = @j

            SELECT    @k = v
            FROM    @Box
            WHERE    i = @k

            SELECT    @CipherBy = ASCII(SUBSTRING(@Text, @Index, 1)) ^ @k,
                @Cipher = @Cipher + CHAR(@CipherBy)

            SELECT    @Index = @Index  +1
              END

    RETURN    @Cipher
END

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This function is used in Decryption function
____________________________________

USE [test]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnInitRc4]
(
    @Pwd VARCHAR(256)
)
RETURNS @Box TABLE (i TINYINT, v TINYINT)
AS

BEGIN
    DECLARE    @Key TABLE (i TINYINT, v TINYINT)

    DECLARE    @Index SMALLINT,
        @PwdLen TINYINT

    SELECT    @Index = 0,
        @PwdLen = LEN(@Pwd)

    WHILE @Index <= 255
        BEGIN
            INSERT    @Key
                (
                    i,
                    v
                )
            VALUES    (
                    @Index,
                     ASCII(SUBSTRING(@Pwd, @Index % @PwdLen + 1, 1))
                )

            INSERT    @Box
                (
                    i,
                    v
                )
            VALUES    (
                    @Index,
                    @Index
                )

            SELECT    @Index = @Index + 1
        END


    DECLARE    @t TINYINT,
        @b SMALLINT

    SELECT    @Index = 0,
        @b = 0

    WHILE @Index <= 255
        BEGIN
            SELECT        @b = (@b + b.v + k.v) % 256
            FROM        @Box AS b
            INNER JOIN    @Key AS k ON k.i = b.i
            WHERE        b.i = @Index

            SELECT    @t = v
            FROM    @Box
            WHERE    i = @Index

            UPDATE    b1
            SET    b1.v = (SELECT b2.v FROM @Box b2 WHERE b2.i = @b)
            FROM    @Box b1
            WHERE    b1.i = @Index

            UPDATE    @Box
            SET    v = @t
            WHERE    i = @b

            SELECT    @Index = @Index + 1
        END

    RETURN
END

Monday, 17 September 2012

How to Import from DBF to SQL Database

Here is the example how to import from DBF table to SQL Databases.

ALTER PROCEDURE [dbo].[Import_Table]
AS
    DECLARE @vSQL varchar(3500)
    DECLARE @vSQL2 varchar(2000)
    DECLARE @vSQLD VARCHAR(1000)
BEGIN
       
    IF EXISTS(SELECT * FROM SYS.TABLES WHERE [NAME]='testtbl')
    BEGIN
        DROP TABLE testtbl
    END
   
    IF EXISTS(SELECT * FROM SYS.SERVERS WHERE [NAME]='DBF')
    BEGIN
        EXEC sp_dropserver 'DBF','droplogins'
    END

    EXEC SP_ADDLINKEDSERVER
        @SERVER='DBF', @SRVPRODUCT ='VFP',
        @PROVIDER='VFPOLEDB', @DATASRC='\\server\Temp\testtbl.DBF'

    SET @vSQL = 'CREATE TABLE [dbo].[testtbl](
    [LOGNo] [float] NULL,
    [SID] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [LS] [datetime] NULL,
    [LE] [datetime] NULL,
    [LT] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [GP] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [LH] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [LD] [float] NULL,
    [LU] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [LA] [float] NULL,
    [CL] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [PI] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [HDL] [varchar](254) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [LOGDATE] [datetime] NULL,
    [LOGTIME] [varchar](254) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
     ) ON [PRIMARY]'
   
SET @vSQL2='INSERT INTO dbo.LV SELECT * FROM DBF...LV'
EXEC (@vSQL)
EXEC (@vSQL2)

    IF EXISTS(SELECT * FROM SYS.SERVERS WHERE [NAME]='mdbDB')
    BEGIN
        EXEC sp_dropserver 'DBF','droplogins'
    END
END

Monday, 10 September 2012

Vertical align and Background image in CSS

As all we know, we can not create any good website without using CSS.
This week, let me share some issues regarding to CSS.

1.) How to algin vertically text box and image box

Solution :
use style="vertical-align:bottom; "

 2. In ASP.Net, if you want background image for your menu,

Solution :
Just add the image through a CSS style.

background-image : url(ur Gif Image url);
background-repeat:no-repeat;

Monday, 3 September 2012

How to use Replace function in C#

Replace is a very popular and useful function in VB.
Let me share how to use Replace function in C#.

public String RemoveQuote(String SQLString)
    {
        SQLString = Regex.Replace(SQLString, "'", "''");
        return SQLString;
    }

protected void cmdTest_Click(object sender, EventArgs e)
{
    me.txttest.Test =     this.txtTest2.Text.Replace("s","ss")
}

Monday, 27 August 2012

Index and length must refer to a location within the string? in ASP.NET

This week, I will post an error and its solution for ASP.Net.
Some might think this error is quite easy to solve.

For me, I spent half day to figure out. :)
Let me share this.

I wanted to use Substring function
<%# DataBinder.Eval(Container.DataItem,".....").ToString().Substring(0,180)   %>

Error - Index and length must refer to a location within the string? in Asp.net


To fix this error,
You have to use Math.Min for length of Substring.

<%# DataBinder.Eval(Container.DataItem,".....").ToString().Substring(0,Math.Min(Eval(".....").ToString().Length,180))%>

Hope this helps

Tuesday, 21 August 2012

The multi-part identifier "......." could not be bound"

Nowadays, if you see in job advert, you will see a common requirement is "Must be Strong in  .Net (VB or C#) or java or etc..
Some might think that Access is a outdated programming.

For me, it is still good enough to run small business.

Let me share an error when I developed a access frontend linking to SQL backend.

Error

"The multi-part identifier "A....." could not be bound"

I checked table field and found nothing wrong.
If so, why?

I use alias  for tables.

How to solve?

If your query is in Access 2003, just add single quote like '...'
If your query is in SQL, just add square bracket like [...]