Thursday, September 26, 2013

Restrict max length textarea using jQuery and Javascript

 Draw Textarea control with class name comment
<asp:TextBox ID="txtComment" runat="server" Text="" TextMode="MultiLine" CssClass="comment" MaxLength="1000" />

Container to display number of chars are remaining
<div class="form_content" id="DivQueryLength"> 1000 characters left</div>

jQuery method to validate and show the messages

$(document).ready(function() {
        $(".comment").keyup(function() {
            validateLimit(this, 'DivQueryLength', 1000);
        });
        $(".comment").keydown(function() {
            validateLimit(this, 'DivQueryLength', 1000);
            //return checkMaxLen(event, this, 1000);
        });
 });

function validateLimit(obj, divID, maxchar) {
    objDiv = get_object(divID);
    if (this.id) obj = this;
    var remaningChar = maxchar - obj.value.length;
    if (objDiv) {
        objDiv.innerHTML = remaningChar + " characters left";
    }
    if (remaningChar <= 0) {
        obj.value = obj.value.substring(maxchar, 0);
        if (objDiv) {
            objDiv.innerHTML = "0 characters left";
        }
        return false;
    }
    else
    { return true; }
}

function get_object(id) {
    var object = null;
    if (document.layers) {
        object = document.layers[id];
    } else if (document.all) {
        object = document.all[id];
    } else if (document.getElementById) {
        object = document.getElementById(id);
    }
    return object;
}

Thursday, September 12, 2013

Wait Query in Sql or Dirty Read testing

A Dirty read takes no notice of any lock taken by another process. The read is officially “dirty” when it reads data that is uncommitted. This can become problematic if the uncommitted transaction fails or for some other reason is rolled back.
 
Imagine a scenario in which you are shopping on a website and place an item into your basket and proceed to payment. The site's checkout process decrements the stock by one and starts to charge your card all in the one transaction. At that time, a second unrelated process starts. The website's back office stock interface runs and makes a dirty read of all the product inventory levels, reading the reduced value. Unfortunately, there is a problem with your transaction (insufficient funds), and your purchase transaction is rolled back. The website stock level has now reverted to the original level, but the stock interface has just reported a different value.
 
Alter Proc Sp_Dirty
AS
Begin
    /*
    Create table Person(Id int Identity(1,1),FirstName varchar(50),LastName varchar(50))
    Insert into Person values('Murli  ','D');Insert into Person values('Deepak  ','D');Insert into Person values('Jamil  ','A')
    */   
    BEGIN TRANSACTION;   
    UPDATE Person     SET FirstName = 'Sujatha'    WHERE LastName = 'D';
    Select * from Person
    WAITFOR DELAY '00:00:05.000';
    ROLLBACK TRANSACTION;
    --Commit
    SELECT FirstName    ,LastName    FROM Person    WHERE LastName = 'D';
End

--=========For Calling =========

Select * from Person
Go
Exec Sp_Dirty

Monday, September 2, 2013

Global.asax file that read url, based on device and redirect to respective destination

        void Application_BeginRequest(object sender, EventArgs e)
        {
            #region 301 Code
            string domain = "http://murlid05.blogspot.com/";
            domain = Request.Url.AbsoluteUri.ToString().Trim().ToLower();
            if ((!domain.Contains("www")) && (!domain.Contains("localhost")))
            {
                domain = domain.Replace("://", "://www.");
                //Response.Status = "301 Moved Permanently";           
                //Response.AddHeader("Location", domain);
            }

            string TargetPage = string.Empty;
            string u = Request.ServerVariables["HTTP_USER_AGENT"];
            Regex b = new Regex(@"android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            u = u.ToLower();
            if ((b.IsMatch(u) == false) && (v.IsMatch(u.Substring(0, 4)) == false))// for Web Site
            {
                if (domain.IndexOf("http://admin.abcdxyz.com/") > 0)
                {
                    TargetPage = "http://www.abcdxyz.com/";
                }
            }
            else
            {
                if (u.IndexOf("iphone") != -1 || u.IndexOf("android") != -1 || u.IndexOf("windows") != -1) //Smart Phone
                {
                    if (domain.IndexOf("smartphone") < 0) TargetPage = "http://m.abcdxyz.com/smartphone/";
                }
                else// for Feature Phone
                {
                    if (domain.IndexOf("featurephone") < 0) TargetPage = "http://m.abcdxyz.com/featurephone/Home.aspx";
                }
            }

            if (TargetPage != string.Empty)
            {
                Response.Status = "301 Moved Permanently";
                Response.AddHeader("Location", TargetPage);
                //Response.Redirect(TargetPage, true);
            }
            #endregion
        }

Thursday, July 18, 2013

Delete Duplicate Records – SQL

If there is an identity and unique column is available

Way 1:-

 WITH cte(ID, RankField)
AS (SELECT Id
, RankField = DENSE_RANK()
OVER (
PARTITION BY ID
ORDER BY newID())
FROM
Temp_ACTIVE)
DELETE FROM cte
WHERE RankField > 1

Way 2:-

/* Create Table with 7 entries - 3 are duplicate entries */
CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT)
INSERT INTO DuplicateRcordTable
SELECT 1, 1
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4
GO

/* It should give you 7 rows */
SELECT *
FROM DuplicateRcordTable
GO

/* Delete Duplicate records */
WITH CTE (COl1,Col2, DuplicateCount)
AS
(
SELECT COl1,Col2,
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
FROM DuplicateRcordTable
)
--DELETE
Select *
FROM CTE
WHERE DuplicateCount > 1
GO

/* It should give you Distinct 4 records */
SELECT *
FROM DuplicateRcordTable
GO

-----------------------------------

If thers is an unique column exists

-- Deleting Duplicate
DELETE
FROM
TestTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM TestTable
GROUP BY NameCol)
GO

Wednesday, July 10, 2013

Send Email using password credantial

    private static void SendSMTPMail(string FromEmail, string maskemail, string ToEmail, string SubjectText, string MessageText)
    {
        string Domain = System.Configuration.ConfigurationManager.AppSettings["Domain"].ToString();
        string DomainUserName = System.Configuration.ConfigurationManager.AppSettings["DomainUserName"].ToString();
        string DomainPassword = System.Configuration.ConfigurationManager.AppSettings["DomainPassword"].ToString();
        string BCC = System.Configuration.ConfigurationManager.AppSettings["BCC"].ToString();

        System.Net.Mail.MailMessage MailObject = new System.Net.Mail.MailMessage();

        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(Domain);
        MailObject.From = new System.Net.Mail.MailAddress(FromEmail, maskemail);
        MailObject.To.Add(ToEmail);
        MailObject.Bcc.Add(BCC);

        NetworkCredential basicAuthenticationInfo = new NetworkCredential(DomainUserName, DomainPassword);

        MailObject.Subject = SubjectText;
        MailObject.IsBodyHtml = true;
        MailObject.Body = "" + MessageText + "";
        MailObject.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnFailure;
        //smtp.EnableSsl = true;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = basicAuthenticationInfo;
        smtp.Send(MailObject);
    }

Monday, July 8, 2013

Get the value of checked checkbox?

var boxes = document.getElementsByName('<%= rdlIsMobile.ClientID %>');
            var val = '';
            var len = boxes.length;
            for (var i = 0; i < len; i++) {
                if (boxes[i].checked) {
                    flag = true;
                    val = boxes[i].value;
                    break;
                }
                //alert(i + (boxes[i].checked ? ' checked ' : ' unchecked ') + boxes[i].value);
            }

Sunday, April 7, 2013

Sql Sqerver : Generate Conditional Table Data Script

“Sql Server 2005:Generate Tables Data Script ” and “Sql Server 2008:Generate Data Script” we have discussed methods to generate table data script for schema based script for Sql Server 2005 and specific table’s data script for Sql Server 2008 respectively.

On suggestion of few friends following script will generate table data script based on your given conditions. This script is useful to generate script for only required records of a targeted table data and not the whole data for a table.
Following are four steps to achieve our goal.
1.       Create function to get all columns name of targeted table
2.       Create function to get values for all columns of targeted table
3.       Create a store procedure, to group our queries for future use.
4.       Execute store procedure with following parameters
a.       Schema Name
b.      Table Name
c.       Condition with WHERE clause
--------------------------------------------------
--STEP (1)
--------------------------------------------------
CREATE FUNCTION [dbo].[fnc_GetColumnsByCommas]
    (
      -- Add the parameters for the function
      @schemaName VARCHAR(50),
      @tableName VARCHAR(50)
    )
RETURNS VARCHAR(4000)
AS BEGIN

    DECLARE @column VARCHAR(2000),
        @columnS VARCHAR(4000),
        @i INT
    SET @i = 0
    SET @column = ''
    SET @columnS = ''

    DECLARE Cur_Columns CURSOR STATIC
        FOR SELECT  sys.columns.name
            FROM    sys.schemas
                    INNER JOIN sys.objects ON sys.schemas.schema_id = sys.objects.schema_id
                    INNER JOIN sys.columns ON sys.columns.object_id = sys.objects.object_id
                    INNER JOIN sys.types ON sys.columns.user_type_id = sys.types.user_type_id
            WHERE   sys.types.name <> 'timestamp'
                    AND sys.objects.type = 'U'
                    AND sys.objects.name = @tableName
                    AND sys.schemas.name = @schemaName
            ORDER BY sys.columns.column_id
    OPEN Cur_Columns
    FETCH FIRST FROM Cur_Columns INTO @column
    WHILE @@FETCH_STATUS = 0
        BEGIN
            IF @i = 0
                SET @columnS = '[' + @column + ']'
            ELSE
                SET @columnS = @columnS + ',' + '[' + @column + ']'
            SET @i = @i + 1

            FETCH NEXT FROM Cur_Columns INTO @column
        END

    CLOSE Cur_Columns
    DEALLOCATE Cur_Columns

 -- Return the result of the function
    RETURN @columns

   END 


--------------------------------------------------
--STEP (2)
--------------------------------------------------
CREATE FUNCTION [dbo].[fnc_GetColumnsForValueByCommas]
    (
      -- Add the parameters for the function here
      @schemaName VARCHAR(50),
      @tableName VARCHAR(50)
    )
RETURNS VARCHAR(4000)
AS BEGIN
 
    DECLARE @column VARCHAR(4000),
        @typeName VARCHAR(500),
        @columnS VARCHAR(2000),
        @ColStart VARCHAR(50),
        @ColEnd VARCHAR(50),
        @i INT

    SET @i = 0

    SET @column = ''
    SET @columnS = ''

    DECLARE Cur_Columns CURSOR STATIC
        FOR SELECT  sys.columns.name,
                    sys.types.name
            FROM    sys.schemas
                    INNER JOIN sys.objects ON sys.schemas.schema_id = sys.objects.schema_id
                    INNER JOIN sys.columns ON sys.columns.object_id = sys.objects.object_id
                    INNER JOIN sys.types ON sys.columns.user_type_id = sys.types.user_type_id
            WHERE   sys.types.name <> 'timestamp'
                    AND sys.objects.type = 'U'
                    AND sys.objects.name = @tableName
                    AND sys.schemas.name = @schemaName
            ORDER BY sys.columns.column_id


    OPEN Cur_Columns
    FETCH FIRST FROM Cur_Columns INTO @column, @typeName
    WHILE @@FETCH_STATUS = 0
        BEGIN
            IF @typeName = 'text'
                OR @typeName = 'uniqueidentifier'
                OR @typeName = 'varbinary'
                OR @typeName = 'smalldatetime'
                OR @typeName = 'char'
                OR @typeName = 'datetime'
                OR @typeName = 'varchar'
                OR @typeName = 'date'
                OR @typeName = 'time'
                BEGIN
                    SET @ColStart = ' ISNULL(CHAR(39) + CAST ( '  
                    SET @ColEnd = ' AS VARCHAR(MAX))+ CHAR(39),''NULL'') '
                END
            ELSE
                IF @typeName = 'nvarchar'
                    OR @typeName = 'ntext'
                    OR @typeName = 'nchar'
                    BEGIN
                        SET @ColStart = 'ISNULL( ''N''+CHAR(39)+ CAST ( ' 
                        SET @ColEnd = ' AS NVARCHAR(MAX)) + CHAR(39),''NULL'') '
                    END
                ELSE
                    BEGIN 
                        SET @ColStart = 'ISNULL(CAST ( ' 
                        SET @ColEnd = ' AS VARCHAR(MAX)), ''NULL'') '
                    END

            IF @i = 0
                SET @columnS = @ColStart + @column + @ColEnd
            ELSE
                SET @columnS = @columnS + '+'',''+' + @ColStart + @column
                    + @ColEnd
            SET @i = @i + 1

            FETCH NEXT FROM Cur_Columns INTO @column, @typeName
        END

    CLOSE Cur_Columns
    DEALLOCATE Cur_Columns


-- Return the result of the function
    RETURN @columns

   END 
--------------------------------------------------
--STEP (3)
--------------------------------------------------
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO


CREATE PROCEDURE [dbo].[proc_CreateInsertStatmentsBySchema]
    (
      -- Add the parameters for the function here
      @SchemaName VARCHAR(50),
      @TableName VARCHAR(50),
      @Condition VARCHAR(2000)
    )
AS
    BEGIN

        DECLARE @tbID INT,
            @tbNAME VARCHAR(50),
            @tbColumn VARCHAR(4000),
            @tbColumnforVal VARCHAR(4000),
            @SQLstr VARCHAR(4000),
            @label VARCHAR(500),
            @Count INT

        SELECT  @tbNAME = '[' + sys.schemas.name + '].[' + sys.objects.name
                + ']',
                @tbColumn = dbo.fnc_GetColumnsByCommas(@schemaName,
                                                       sys.objects.name),
                @tbColumnforVal = dbo.fnc_GetColumnsForValueByCommas(@schemaName, sys.objects.name)
        FROM    sys.schemas
                INNER JOIN sys.objects ON sys.schemas.schema_id = sys.objects.schema_id
        WHERE   sys.objects.type = 'U'
                AND sys.schemas.name = @schemaName
                AND sys.objects.name = @TableName

        SET @SQLstr = 'SELECT ' + CHAR(39) + 'INSERT INTO ' + @tbNAME + '  ('
            + @tbColumn + ')  VALUES ( ''+' + @tbColumnforVal
            + ' +'')'' FROM ' + @tbNAME + @Condition
        EXEC ( @SQLstr
            )

    END

--------------------------------------------------
STEP (4)Execute store procedure with “Result to Text” option

--------------------------------------------------  
    Use AdventureWorks
    EXEC [dbo].[proc_CreateInsertStatmentsBySchema] 'HumanResources',
        'Department', ' WHERE DepartmentID <10 span="">
I got a reference from one of wonderfull site i.e
  • http://connectsql.blogspot.com/2010/11/sql-server-management-studio-generate.html
  • http://connectsql.blogspot.com/2009/09/generate-tables-data-script.html