Delegate in asp dotnet csharp, with simple example

In asp.net csharp, delegates allow programmer to create a variable that ‘points’ to a method.

We know that variables STORES VALUES, similar way deligates STORES POINTER TO METOD.

So we can dynamically or at various time SET DELIGATE in a way that our CALL actually invokes different method.

First step when using a delegate is to define its signature.

So when we use(or point) a delegate variable, we can point only to a method that matches its specific signature.

//declare deligate signature
public delegate int myCustomDeligate(int v1, int v2);

protected void Page_Load(object sender, EventArgs e)
{
//deligate variable created
myCustomDeligate objPointerToMethod;

objPointerToMethod = AddNumber;
Response.Write(“At time 1 result is=” + objPointerToMethod(3,5) + “<br/>”);

objPointerToMethod = AddNumberV2;    //this is interesting our variable now pointing to second method
Response.Write(“At time 2 result is=” +objPointerToMethod(3, 5) + “<br/>”);

}

//one method
public int AddNumber(int a1, int a2)
{
return a1 + a2;
}

//second method with same signature,but some other logic here
public int AddNumberV2(int b1, int b2)
{
return b1 + b2 + 10;    //here adding numbers, and adding 10 also to it
}

Advertisements

Visual Studio 2008 intellisense not working <asp: or stops working for aspx page code view

I just realize importance of ‘intellisense’, as before 2 days visual studio 2008 version, got some issue and when i type TAG for example <asp: , i was not getting immediate menu with suggestion to finish line.

I tried with, Restarting studio and even from Visual Studio Command prompt tried executing command

devenv /ResetSettings

but not got sllution, then from http://forums.asp.net/t/1205528.aspx

seen one comment that states that we can clear all files from following two path:

C:\Documents and Settings\<username>\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas

C:\Documents and Settings\<username>\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs

and my Problem Gone. All kind of suggestions are working now in aspx file.

Return json format data from code behind of asp.net csharp

Review following code snippet to retrive json data in c#.

String strResult = “”;
strResult += “{‘xproducts’: “;
strResult += “[“;
if (dtable.Rows.Count > 0)
{
for (int i = 0; i < dtable.Rows.Count; i++)
{
strResult += “{ “;
strResult += “‘xid’:'” + dtable.Rows[i][“Id”].ToString() + “‘, “;
strResult += “‘xname’:'” + dtable.Rows[i][“Name”].ToString() + “‘, “;
strResult += “‘xprice’:'” + dtable.Rows[i][“Price”].ToString() + “‘, “;
strResult += “} “;
if (i != dtable.Rows.Count – 1)
{ strResult += “,”; }
}

}
strResult += “]”;
strResult += “}”;

context.Response.ContentType = “text/html”;
context.Response.Write(strResult);

 

Other Post for javascript:

https://siddharthboraniait.wordpress.com/2013/09/11/show-current-date-using-javascript-in-web-browserclient-side-date-in-web-browser/

How to make custom Task Scheduler in asp.net c# using thread

In asp.net there are needs for performing few activities periodically. For that  we can use some class libraries or third party component to schedule a task or function to execute periodically.

Recently i found following simplest way to execute periodically any code.

Suppose you have  a class and routine as follow in App_Code/CS,

public class ClassABC
{
public static void SomeFunctionToRunPeriodically()
{
try
{
System.IO.File.WriteAllText(System.Web.Hosting.HostingEnvironment.MapPath(“~/LatestRunSaved.txt”), “Last Run of function at : ” + DateTime.Now.ToString() + Environment.NewLine);
}
catch (Exception ex)
{
string t = ex.Message;
}
System.Threading.Thread.Sleep(20000);
SomeFunctionToRunPeriodically();    //calling self after interval

}
public ClassABC()
{
//
// TODO: Add constructor logic here
//
}
}

If you notice in above function then its calling to itself after interval.

Now in global application file ‘global.asax’  inside application start event use following lines to create a new thread based call to a function above.

void Application_Start(object sender, EventArgs e)
{
System.Threading.Thread obj = new System.Threading.Thread(new System.Threading.ThreadStart(ClassABC.SomeFunctionToRunPeriodically));
obj.Name = “AnyTestName”;
obj.IsBackground = true;
obj.Start();
}

New thread based function call will run until your application is running in IIS process, It is a background process. Other routine things on site will work normally without problem.

LINQ basic query samples in csharp asp.net with join

Assuming “db” is considered as databasecontext object

/////// typical query with condition that returns annonymous object ///////////
var contacts =
from customer in db.Customers
where customer.Name.StartsWith(“A”) && customer.Orders.Count > 0
orderby customer.Name
select new { customer.Name, customer.Phone };

/////// get count with running query///////////
var query = (from o in Order
where CustomerID = 2
select o).Count();

/////////////// inner join (matching in both only) //////////////

var cr = from c in MyDatabase.GetReadOnlyContext().tblCategories
join p in MyDatabase.GetReadOnlyContext().tblProducts on c.CategoryId equals p.CategoryId
select new { c.CategoryName, p.ProductName };

//////////////// left outer joing

var crForLeftOuterJoin = from cat in dc.tblCategories
join pro in dc.tblProducts
on cat.CategoryId equals pro.CategoryId
into xname
from pro in xname.DefaultIfEmpty()
select new {
CAP_Cat = cat.CategoryName,
CAP_Product = pro == default(tblProduct) ? “(no product)” : pro.ProductName
};

//////// getting rows from table as LIST collection /////////////
List lstCat= dc.tblCategories.ToList();

//////// getting rows from table as Array /////////////
tblCategory[] arrCat= dc.tblCategories.ToArray();

///////////////seeking particular element/single element from query ///////////////////

var firstproduct = (from product in db.Products
where product.Category.CategoryName == “Beverages”
select product
).AsEnumerable().ElementAt(0);

Display SQL SERVER Message,Using InfoMessage Event from SQL SERVER, to troubleshoot stored procedure

Big stored procedures which are building QUERY dynamically according to parameters are used sometime for large web applications.

Bad luck starts when such procedure gives error, and as query itself build at run time, user may frustrates catching the right error.

Also,Debugging becomes challenging with it.

One way is to use PRINT statement at end of procedure, so when stored procedure executed it displays DYNAMIC QUERY.

In SQL Server Management studio we can easily view the printed query.

But what if you want it in ASP.NET environemt?

SqlConneciton class has
SqlConnection.InfoMessage event, which occurs, when SQL Servers returns a warning or informational message.

First create ‘SqlConnection’ object.

string connectionString = “Your Connection String…”;
SqlConnection myConn = new SqlConnection(connectionString);
Then, Relate method to event.

myConn.InfoMessage += new SqlInfoMessageEventHandler(MyConnection _InfoMessage);

 

Your method may look like following:
System.Text.StringBuilder sbLog = new System.Text.StringBuilder();

void MyConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
sbLog.AppendLine(e.Message);
}

Execute following code and test output with ‘sbLog.ToString()’.

SqlCommand cmd = new SqlCommand();

if (cn.State != ConnectionState.Open)
cn.Open();

cmd.Connection = myConn;
cmd.CommandText = “SP_That_Prints_Query”;

cmd.CommandType = CommandType.StoredProcedure;

cmd.ExecuteNonQuery();

 

‘sbLog.ToString()’ will give you dynamic query generated in your stored procedure.

 

Output parameter in stored procedure with ExecuteReader method

Conventionally ExecuteReader method is used for returning DataReader object.

Which in turn you can use to fill DataTable.

What if you want a DataTable and some return argument from your stored procedure?

One way is explained below.

Your stored procedure will have one OUTPUT parameter , that will give you number returned form database:

CREATE PROCEDURE GETPRODICTS

@Keyword nvarchar(20),

@CNT int OUTPUT

AS

Select * from product where productname like ‘%’ + @Keyword  + ‘%’

Select @CNT=count(*) from product where productname like ‘%’ + @Keyword  + ‘%’

GO

And in ASP.Net Code should be like:

Int32 intCNT;

DataTable xTbl = new DataTable();

using (SqlConnection conn = new SqlConnection(connectionString))  

 {

SqlCommand cmd= new SqlCommand();

cmd.Connection = conn;

cmd.CommandType= CommandType.StoredProcedure;

cmd.CommandText = “GETPRODUCTS”;

 

SqlParameter[]  tmpParam = new SqlParameter[] {

                new SqlParameter(“@keyword”, SqlDbType.NVarChar,20),

                new SqlParameter(“@CNT”, SqlDbType.Int)};

 

                tmpParam [0].Value =”test”;

                tmpParam [1].Direction = ParameterDirection.Output;

 

cmd.Parameters.Add(tmpParam);

SqlDataReader rdr =cmd.ExecuteReader(CommandBehavior.CloseConnection);

                if (rdr.HasRows)

                {  xTbl.Load(rdr);  }

                rdr.Close();

                intCNT = int.Parse(cmd.Parameters[1].Value.ToString());

    }

Make sure you CLOSE data reader object before retrieving values from parameter.

So here you will get DataTable with records from data base  and Integer variable (intCNT)  with record count from same table.

 

Other Technical Stuff from Siddharth:

Show current date using Javascript in web browser(Client side date in web browser
https://siddharthboraniait.wordpress.com/2013/09/11/show-current-date-using-javascript-in-web-browserclient-side-date-in-web-browser

 

How to make custom Task Scheduler in asp.net c# using thread
https://siddharthboraniait.wordpress.com/2013/09/06/howto-make-custom-task-scheduler-in-asp-net-csharp-using-thread

 

Introduction to Andriod – First step towards Andriod application development
https://siddharthboraniait.wordpress.com/2011/07/18/know-andriod-introduction-to-andriod