Tuesday, June 16, 2009

Call webservice from JavaScript from Master Content Page

You can call web service from JavaScript & display result on page asynchronously from Master Content Page.

Ex:In this example we are getting charges for particulars on the basis of diffrent specification as Consignor City,Consignee City,Weight, Risk Charge, DocType etc.

ChargeCalculation.aspx
<%@ Page Language="C#" MasterPageFile="~/MainMaster.master" AutoEventWireup="true" CodeFile="ChargeCalculation.aspx.cs" Inherits="Testing_ChargeCalculation" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<script>
function CallService(arguments) // Send All argument in string with seprator
{
var concity=document.getElementById("ctl00_ContentPlaceHolder1_ddlConCity");
var cnecity=document.getElementById("ctl00_ContentPlaceHolder1_ddlCneCity");
var concityName=concity.options[concity.selectedIndex].text;
var cnecityName=cnecity.options[cnecity.selectedIndex].text;
var riskvalue=document.getElementById("<%=TxtConignmentValue.ClientID%>").value;
var weight= document.getElementById("<%=TxtWeight.ClientID%>").value;

var arguments =concityName+"_"+cnecityName+"_"+riskvalue+"_"+weight+"_"+"_D"+"_D";
MyPro.MyWebService.GetCharges(arguments,DisplayResult);
}

function DisplayResult(result)
{
var doc;
try
{
if (window.ActiveXObject) //this is for IE
{
doc=new ActiveXObject("Microsoft.XMLDOM");
doc.async="false";
doc.loadXML(result);
}
else // This is For Mozila
{
var parser=new DOMParser();
var doc=parser.parseFromString(result,"text/xml");

}
//The parser will parse the result content as xml tags from "result" string
//then we can get elements by tag name from XML. Like following.

document.getElementById("<%=LblRiskCharge.ClientID%>")
.innerHTML=doc.getElementsByTagName("HeavyCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblHeavyCharge.ClientID%>")
.innerHTML=doc.getElementsByTagName("RiskCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblService.ClientID%>")
.innerHTML=doc.getElementsByTagName("ServiceCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblFuel.ClientID %>")
.innerHTML=doc.getElementsByTagName("FuelCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblTotalCharge.ClientID %>")
.innerHTML=doc.getElementsByTagName("TotalAmount")[0].childNodes[0].nodeValue;

}
<\script>
<asp:Content>


MyWebService.asmx.cs //code file of web service

namespace MyPro
{
[WebService(Namespace = "MyPro")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService] // This should be placed for script access
public class MyWebService : System.Web.Services.WebService
{

[WebMethod]
[ScriptMethod]
public string GetCharges(string parameters)
{
char[] spilter = new char[] { '_' };
string[] args = parameters.Split(spilter);
string conCity=args[0]; // Send
string cneCity=args[1]; // arguments
string riskvalue = args[2]; // as u need
string weight = args[3]; // But remember
string docType = args[4]; // indexes of
string region = args[5]; // Items


Rates rs = new Rates();// Class for Rate Calculation & Charges Methods
DataSet DsCharges=rs.GetCharges(conCity,cneCity,riskvalue,weight,docType,region)

return DsCharges.GetXml();

}
}

Tuesday, April 28, 2009

Parse & save Email Id's from File With Regex

public class EmailSeprator
{
private string[] Parse(string idString)
{
string pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|" +
@"0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z]" +
@"[a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
return Regex.Split(idString.Trim(), pattern, RegexOptions.IgnoreCase);
}

public int Save(string Ids)
{
ArrayList mails=new ArrayList();
string[] listMails=Parse(Ids);
mails.AddRange(listMails);
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings.Get("ConnectionString"));
SqlDataAdapter sda = new SqlDataAdapter("Select Email from Testing", con);
DataSet DsSql = new DataSet();
sda.Fill(DsSql, "Emails");
for (int i = 0; i < listMails.Length; i++)
{

DataRow dr = DsSql.Tables["Emails"].NewRow();
dr["Email"] = mails[i].ToString();
DsSql.Tables["Emails"].Rows.Add(dr);
}

return sda.Update(DsSql);
}
}

Thursday, April 9, 2009

How to load dll dynamically at runtime & create instances.

public static T GetInstanceByCustomAttribute(Assembly assembly, string customAttributeName)
{
Type[] types = assembly.GetTypes();
foreach (Type type in types)
{

Object[] attributes = (Object[])type.GetCustomAttributes(false);


foreach (Object attribute in attributes)
{
//"LoggingFactoryImplementaionAttribute";

if (attribute.GetType().Name.ToLower().Equals(customAttributeName.ToLower()))
{
return (T)Activator.CreateInstance(type);

}
}
}
return default(T);
}

Thursday, March 12, 2009

XML - Query Engine

This is the xml file which consist the Select Query in xml format,


<query>
<select> <column><field>Uid <alias>UserId <column><field>Pwd <alias>Password <column> <field>City <alias>City</select>
<from>
<table>Users <tbody></tbody></table></from>
<where>
<condetion>
<field>Uid</field>
<operator>!=</operator>

<parameterbind type="NVarchar">@userid</parameterbind>
</condetion>
<boolean operator="AND"></boolean>
<condetion>
<field>City</field>
<operator>Like</operator>
<value>'S%'</value>
</condetion>
<boolean>
</where>
<sort>
<condetion>
<field>Uid</field>
<order>Asc</order>
</condetion>
</sort>
</query>"


TO Genrate Query @ runtime,
create following Classes.


namespace XMLEngine
{
class Query // This Class Object would return by Query Engine
{
private string _queryString;
private Dictionary<string,> _paramters;
List<sqlparameter> ReturnParams = new List<sqlparameter>();


public Query()
{
_queryString = "";
_paramters = new Dictionary<string,>();
}
public string QueryString
{
get { return _queryString; }
set { _queryString = value; }
}

public Dictionary<string,> Paramters
{
get { return _paramters; }
set { _paramters = value; }
}

public void BindParameters(string key,string paramValue)
{
SqlParameter sp = _paramters[key];
sp.Value = paramValue;
_paramters[key] = sp;
}

public bool HasParametrs
{
get
{
return (_paramters.Count > 0);
}
}

public Int32 CountParametrs
{
get {return _paramters.Count; }
}

public SqlParameter[] GetParameters
{
get
{
foreach (SqlParameter sp in _paramters.Values)
{
ReturnParams.Add(sp);
}
return ReturnParams.ToArray();
}
}
}
}



And Then create Engine which Create Query and Parameters List,


namespace XMLEngine
{
class QueryEngine
{
static StringBuilder sbQuery;
static XmlDocument doc;

//List<sqlparameter> params_;
Dictionary<string,sqlparameter> params_;


public QueryReader()
{
sbQuery = new StringBuilder();
doc = new XmlDocument();
params_ = new Dictionary<string,>();
}

public Query GetQuery(string XmlDocPath)
{
Query qry = new Query();
doc.Load(XmlDocPath);

WriteSelectClause();
WriteFromClause();
WriteWhereClause();
WriteOrderByClause();

qry.Paramters = params_;
qry.QueryString=sbQuery.ToString();
//Console.WriteLine(sbQuery.ToString());
//Console.ReadKey();
return qry;
}

public void GetQueryOld(string XmlDocPath)
{
XmlDocument doc = new XmlDocument();
doc.Load(XmlDocPath);

XmlNodeList Views = doc.GetElementsByTagName("View");

foreach (XmlNode Columns in Views[0])
{
XmlElement xl = (XmlElement)Columns;
//XmlNodeList ColmnList = xl.GetElementsByTagName("Column");
Console.WriteLine(xl.GetElementsByTagName("Column")[0].InnerText + "." + xl.GetElementsByTagName("Column")[1].InnerText + "." + xl.GetElementsByTagName("Column")[2].InnerText);
//foreach (XmlNode Cols in Columns.ChildNodes)
//{
// XmlElement Desc = (XmlElement)Cols;
// Console.WriteLine(Desc.InnerText);
//}
}
Console.ReadKey();
}

public void WriteSelectClause()
{
sbQuery.Append("Select ");
XmlNodeList XSelectNodeList = doc.GetElementsByTagName(Constants.NODE_NAME_VIEW);
//XmlNode XSelectNode = doc.SelectSingleNode("/Select");
foreach (XmlNode xnColName in XSelectNodeList[0])
{
XmlElement Column = (XmlElement)xnColName;
sbQuery.Append(Column.GetElementsByTagName(Constants.NODE_NAME_FIELD)[0].InnerText);
if (Column.GetElementsByTagName(Constants.NODE_NAME_FIELD)[0].InnerText != "*")
{
sbQuery.Append(" As " + Column.GetElementsByTagName(Constants.NODE_NAME_ALIAS)[0].InnerText);
}
sbQuery.Append(",");
}
sbQuery.Remove(sbQuery.Length - 1, 1);
}

public void WriteFromClause()
{
sbQuery.Append(" From ");

XmlNodeList XFromNodeList = doc.GetElementsByTagName(Constants.NODE_NAME_FROM);

foreach (XmlNode XFromNode in XFromNodeList)
{
XmlElement From = (XmlElement)XFromNode;
sbQuery.Append(From.GetElementsByTagName(Constants.NODE_NAME_TABLE)[0].InnerText);
}
sbQuery.Append(" ");
}

public void WriteWhereClause()
{
sbQuery.Append(" Where ");
XmlNodeList XWhereNodeList = doc.GetElementsByTagName(Constants.NODE_NAME_FILTER);
foreach (XmlNode xnCondetion in XWhereNodeList[0])
{
XmlElement Condetion = (XmlElement)xnCondetion;

if (Condetion.Name ==Constants.NODE_NAME_BOOLEAN)
{
sbQuery.Append(" "+Condetion.GetAttribute(Constants.NODE_NAME_OPERATOR)+" ");
}
else
{
foreach (XmlNode xnCondTags in Condetion.ChildNodes)
{
if (xnCondTags.Name == Constants.NODE_NAME_FIELD)
{
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_FIELD)[0].InnerText);
}
else if (xnCondTags.Name == Constants.NODE_NAME_OPERATOR)
{
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_OPERATOR)[0].InnerText);
}
else if (xnCondTags.Name == Constants.NODE_NAME_VALUE)
{
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_VALUE)[0].InnerText);
}
else if (xnCondTags.Name == Constants.NODE_NAME_PARAMETERBIND)
{
XmlElement xParam=(XmlElement)xnCondTags;
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_PARAMETERBIND)[0].InnerText);
SqlParameter sp = new SqlParameter(Condetion.GetElementsByTagName(Constants.NODE_NAME_PARAMETERBIND)[0].InnerText, SqlDbType.NVarChar);
sp.ResetSqlDbType();
//sp.UdtTypeName = xParam.GetAttribute("type");
this.params_.Add(Condetion.GetElementsByTagName(Constants.NODE_NAME_FIELD)[0].InnerText, sp);
}
}
}



}

}

public void WriteOrderByClause()
{
sbQuery.Append(" Order By ");
XmlNodeList XSortNodeList = doc.GetElementsByTagName(Constants.NODE_NAME_SORT);

foreach (XmlNode xnCondetion in XSortNodeList[0])
{
XmlElement Condetion = (XmlElement)xnCondetion;
//sbQuery.Append(Condetion.InnerText+"-----");
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_FIELD)[0].InnerText);
sbQuery.Append(" " + Condetion.GetElementsByTagName(Constants.NODE_NAME_ORDER)[0].InnerText);
sbQuery.Append(",");
}
sbQuery.Remove(sbQuery.Length - 1, 1);
}

}
}

And All used Constant Value would fetch from This Static Class.

namespace XMLEngine
{
public static class Constants
{
public const string
NODE_NAME_DOCUMENT_ELEMENT = "Query",
NODE_NAME_VIEW = "Select",
NODE_NAME_FROM = "From",
NODE_NAME_FILTER = "Where",
NODE_NAME_PARAMETERBIND = "ParameterBind",
NODE_NAME_SORT = "Sort",
NODE_NAME_CONDITION = "Condition",
NODE_NAME_TABLE = "Table",
NODE_NAME_FIELD = "Field",
NODE_NAME_ALIAS = "Alias",
NODE_NAME_COLUMN = "Column",
NODE_NAME_BOOLEAN = "Boolean",
NODE_NAME_OPERATOR = "Operator",
NODE_NAME_GROUPING = "Grouping",
NODE_NAME_GROUP = "Group",
NODE_NAME_ASCENDING = "Asc",
NODE_NAME_DESCENDING = "Desc",
NODE_NAME_VALUE = "Value",
NODE_NAME_AND = "And",
NODE_NAME_OR = "Or",
NODE_NAME_NOT = "Not",
NODE_NAME_ORDER = "Order";

public const string
DEFAULT_NAME_ROW_INDEX_FIELD = "rowIndex";

public const int
DEFAULT_PAGE_SIZE = 10;
}
}

Wednesday, March 4, 2009

genrate dynamic query from dataset

we can gerate dynamic query from datset by following function,

but remember the passing dataset should have same table name as Database,
we can give the Dataset table name at fill time,eg. adapter.fill(Ds,"Users");

public string GetCommandText(DataSet Ds1)
{
bool esc = true;
string tabname = Ds1.Tables[0].TableName;
StringBuilder QueryText = new StringBuilder("Select ");

foreach (DataColumn dc in Ds1.Tables[0].Columns)
{
if (esc)
{
QueryText.Append(dc.ColumnName);
}
else
{
QueryText.Append("," + dc.ColumnName);
}

esc = false;
}
QueryText.Append(" from ");
QueryText.Append(tabname);

string Pk = Ds1.Tables[0].PrimaryKey[0].ColumnName;
StringBuilder sbWhere = new StringBuilder();
sbWhere.Append(" Where ");
sbWhere.Append(Pk);
sbWhere.Append(" In (");

foreach (DataRow dr in Ds1.Tables[0].Rows)
{
sbWhere.Append(dr[Pk]);
sbWhere.Append(",");
}
sbWhere.Remove(sbWhere.Length - 1, 1);
sbWhere.Append(")");

QueryText.Append(sbWhere.ToString());
Console.WriteLine(QueryText.ToString());
return QueryText.ToString();
}

Basics of Merging Datasets

Hi, Friends ,
This is my first blog. so please ignore mistakes if i have done in this article.

So When i got this task mean merging the datasets and Update Database , i got nervous but now i m feeling its too easy.

Now Explaning with follwing code,

For Create Dataset 1

SqlConnection con = new SqlConnection(connString);
SqlDataAdapter sda = new SqlDataAdapter("Select * from Users", con);
DataSet Ds = new DataSet();
SqlCommandBuilder sbd = new SqlCommandBuilder(sda);
sbd.ConflictOption = ConflictOption.OverwriteChanges;

sda.AcceptChangesDuringFill = false; //This will maintain Row State-Added

sda.AcceptChangesDuringUpdate = false; //This will maintain Row State-Added

sda.ContinueUpdateOnError = true; // This will contineu update source

sda.FillLoadOption = LoadOption.OverwriteChanges;
//this is must to get Row State Unchanged

sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
// To get Primary key & others constraint


sda.Fill(Ds); //finally fill the Dataset1


For Create Dataset 2

SqlConnection con1 = new SqlConnection(connString2)
SqlDataAdapter sda1 = new SqlDataAdapter("Select * from Users", con1);
DataSet Ds1 = new DataSet();
sda1.AcceptChangesDuringFill = false;
sda1.AcceptChangesDuringUpdate = false;

sda1.FillLoadOption = LoadOption.Upsert;//This will fill rows with State - Added

SqlCommandBuilder sbd1 = new SqlCommandBuilder(sda1);
sbd1.ConflictOption = ConflictOption.OverwriteChanges;
sda1.ContinueUpdateOnError = true;
sda1.MissingSchemaAction = MissingSchemaAction.AddWithKey;

sda1.Fill(Ds1); //finally fill the Dataset 2

//Ds1.AcceptChanges(); Do not Write this Coz this will change row state

Ds.Merge(Ds1, false, MissingSchemaAction.AddWithKey);
sda.Update(Ds);

In this Code no where is code for Row state but whole code depend on Row state.
So be carefull on Row State