Click here to Skip to main content
14,883,063 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
This is my xml file data : name=newxf.xml

HTML
<newdataset>
  <lrtest>
    <lr_no>12807</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
  <lrtest>
    <lr_no>12808</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
  <lrtest>
    <lr_no>12811</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
<lrtest>
    <lr_no>13466</lr_no>
    <bkg_stn>VATVA</bkg_stn>
    <frmshort>VAT</frmshort>
  </lrtest>
</newdataset>



I created the below said table:

SQL
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[IExml](
	[Lr_no] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[Bkg_Stn] [varchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[FrmShort] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

===========================
And i am running this query to bulk load xml file into
my sql server table.

SQL
use master
DECLARE @TESTPB TABLE (Lr_no Varchar (50), Bkg_Stn Varchar(30) , FrmShort Varchar(5))
DECLARE @xml XML;
SELECT @xml = (
	SELECT * FROM OPENROWSET(
	BULK 'D:\newxf.xml',
	SINGLE_BLOB) x)
INSERT INTO @TestPB(LR_no,Bkg_Stn,FrmShort)
SELECT  X.product.value('LR_no[1]', 'Varchar(50)'),
		X.product.value('Bkg_Stn[1]', 'Varchar(30)'),
		X.product.value('FrmShort[1]', 'Varchar(5)')
FROM
@xml.nodes('NewDataSet/LRTest') AS X(product);
INSERT INTO Master.dbo.IExml
Select * From @TestPB

==============================

And Result is :

Lr_no Bkg_Stn FrmShort
NULL CHATRAL CTR
NULL CHATRAL CTR
NULL CHATRAL CTR
NULL SARKHEJ SRK
NULL SARKHEJ SRK
NULL SARKHEJ SRK
NULL VATVA VAT
NULL SARKHEJ SRK

The problem is when i am execute above said query i get the msg. com complt sucfully.
But LR_No Column data is not inserting....

The Lr_no column conatained numerical data , is should be look like :
Lr_no Bkg_Stn FrmShort
123456 CHATRAL CTR
123457 CHATRAL CTR
123458 CHATRAL CTR
123459 SARKHEJ SRK
123451 SARKHEJ SRK
123452 SARKHEJ SRK

Please let me know where i am going wrong. its urgent.. pls..... help me...
Posted
Updated 31-Jan-12 0:18am
v5
Comments
Herman<T>.Instance 31-Jan-12 6:08am
   
somehow the integer value of 12811 is not inserted.
SqlBulkCopy command (bcp) might be useful to use
gufran90 31-Jan-12 6:24am
   
Thx for Reply @digimanus

But can u give me a example for bcp
for the abouve said code :
Herman<T>.Instance 31-Jan-12 6:49am
   
http://msdn.microsoft.com/en-us/library/ms188365.aspx
http://msdn.microsoft.com/en-us/library/ms162802.aspx

1 solution

XML parsing is case sensitive process

Please make sure that you are using this call as per your XML shared above

SQL
SELECT  X.product.value('lr_no[1]', 'Varchar(50)'),
        X.product.value('bkg_stn[1]', 'Varchar(30)'),
        X.product.value('frmshort[1]', 'Varchar(5)')
FROM
@xml.nodes('newdataset/lrtest') AS X(product);



Please look for the "LR_no[1]" to "lr_no[1]" case changes.
   
Comments
gufran90 1-Feb-12 9:35am
   
Thx for help Mr.Rahul , u r right when i change case its running ok,
Now if run the same query with more columns

Insert into Master.dbo.TrnBal (LR_No,LR_Date,Bkg_Stn,FrmShort,Dst,ToShort,Consignor_Name,Consignee_Name,Pvt_Mark,Discription,Article,Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,
S_Tax,Amount,Initial,Report_No,Rep_Date)
Select XmlQuery.query('LR_No[1]').value('.', 'Varchar(50)'),
XmlQuery.query('LR_Date[1]').value('.', 'smalldatetime'),
XmlQuery.query('Bkg_Stn[1]').value('.', 'Varchar(30)'),
XmlQuery.query('FrmShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Dst[1]').value('.', 'Varchar(30)'),
XmlQuery.query('ToShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Consignor_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Consignee_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Pvt_Mark[1]').value('.', 'varchar(20)'),
XmlQuery.query('Discription[1]').value('.', 'varchar(20)'),
XmlQuery.query('Article[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Weight[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Value[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Pmt_Mode[1]').value('.', 'varchar(10)'),
XmlQuery.query('DoorDel[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('LR_Remark[1]').value('.', 'varchar(50)'),
XmlQuery.query('Freight[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('BC[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Handling[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('DDel[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('LC[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Others[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('S_Tax[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Amount[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Initial[1]').value('.', 'varchar(15)'),
XmlQuery.query('Report_No[1]').value('.', 'int'),
XmlQuery.query('Rep_Date[1]').value('.', 'smalldatetime')
FROM (
SELECT CAST(XmlQuery AS XML)
FROM OPENROWSET(
BULK 'D:\fxmlf.xml',
SINGLE_BLOB) AS T(XmlQuery)
) AS T(XmlQuery)
CROSS APPLY XmlQuery.nodes('NewDataSet/LRTest') AS XmlQuery(Trnbal);
its giving me error : Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.

can u pls. guide me where i am going wrong
RDBurmon 1-Feb-12 9:42am
   
Could you please give me below information
1) table structure of "TrnBal" table.
2) XML data in D:\fxmlf.xm file.
RDBurmon 1-Feb-12 9:58am
   
Try this

Insert into TrnBal (LR_No,LR_Date,Bkg_Stn,FrmShort,Dst,ToShort,Consignor_Name,Consignee_Name,Pvt_Mark,Discription,Article,Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,
S_Tax,Amount,Initial,Report_No,Rep_Date)
Select XmlQuery.query('LR_No[1]').value('.', 'Varchar(50)'),
XmlQuery.query('LR_Date[1]').value('.', 'smalldatetime'),
XmlQuery.query('Bkg_Stn[1]').value('.', 'Varchar(30)'),
XmlQuery.query('FrmShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Dst[1]').value('.', 'Varchar(30)'),
XmlQuery.query('ToShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Consignor_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Consignee_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Pvt_Mark[1]').value('.', 'varchar(20)'),
XmlQuery.query('Discription[1]').value('.', 'varchar(20)'),
XmlQuery.query('Article[1]').value('0', 'decimal(18,0)'),
XmlQuery.query('Weight[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Value[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Pmt_Mode[1]').value('.', 'varchar(10)'),
XmlQuery.query('DoorDel[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('LR_Remark[1]').value('.', 'varchar(50)'),
XmlQuery.query('Freight[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('BC[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Handling[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('DDel[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('LC[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Others[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('S_Tax[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Amount[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Initial[1]').value('.', 'varchar(15)'),
XmlQuery.query('Report_No[1]').value('0', 'int'),
XmlQuery.query('Rep_Date[1]').value('.', 'smalldatetime')
FROM (
SELECT CAST(XmlQuery AS XML)
FROM OPENROWSET(
BULK 'D:\fxmlf.xml',
SINGLE_BLOB) AS T(XmlQuery)
) AS T(XmlQuery)
CROSS APPLY XmlQuery.nodes('NewDataSet/LRTest') AS XmlQuery(Trnbal);
RDBurmon 1-Feb-12 9:59am
   
Please note I have replaced "('.', 'decimal" with "('0.0', 'decimal" and "'.', 'int'" with "'0', 'int''

Hope this helps or else revert back with your queries
--Rahul D.
gufran90 2-Feb-12 6:05am
   
Thx for replying me Mr.RAHUL

Actually the problem is in smalldatetime column , Now, i am giving
you a total information of my query please take a look below.

Here is my finel query : works fine all the way... thx for your help...

Now i am posting my finel query which i want run through vb.net 2008 :
what i want to do is User Just input the xml File Name and on Button event
i want to run this query.
can u guide me in this please

USE MASTER
Go
DECLARE @CD TABLE (XMLData XML);
INSERT INTO @CD
SELECT *
FROM OPENROWSET(BULK N'D:\fxmlcon.xml', SINGLE_BLOB) rs;

INSERT INTO Master.dbo.TrnBal (LR_no, LR_Date, Bkg_Stn, FrmShort, Dst, ToShort, Consignor_Name, Consignee_Name, Pvt_Mark, Discription, Article,
Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,S_Tax,Amount,Initial,Report_No,Rep_Date)

SELECT LR_No = x.data.value('LR_No[1]', 'int'),
LR_Date = x.data.value('LR_Date[1]', 'Varchar(50)'),
Bkg_Stn = x.data.value('Bkg_Stn[1]', 'Varchar(30)'),
FrmShort = x.data.value('FrmShort[1]', 'Varchar(5)'),
Dst = x.data.value('Dst[1]', 'Varchar(30)'),
ToShort = x.data.value('ToShort[1]', 'Varchar(5)'),
Consignor_Name = x.data.value('Consignor_Name[1]', 'Varchar(30)'),
Consignee_Name = x.data.value('Consignee_Name[1]', 'Varchar(30)'),
Pvt_Mark = x.data.value('Pvt_Mark[1]', 'Varchar(20)'),
Discription = x.data.value('Discription[1]', 'Varchar(20)'),
Article = x.data.value('Article[1]', 'decimal(18,0)'),
Weight = x.data.value('Weight[1]', 'decimal(18,0)'),
Value= x.data.value('Value[1]', 'decimal(18,0)'),
Pmt_Mode = x.data.value('Pmt_Mode[1]', 'Varchar(5)'),
DoorDel = x.data.value('DoorDel[1]', 'Varchar(5)'),
LR_Remark = x.data.value('LR_Remark[1]', 'Varchar(50)'),
Freight = x.data.value('Freight[1]', 'decimal(18,0)'),
BC = x.data.value('BC[1]', 'decimal(18,0)'),
Handling = x.data.value('Handling[1]', 'decimal(18,0)'),
DDel = x.data.value('DDel[1]', 'decimal(18,0)'),
LC = x.data.value('LC[1]', 'decimal(18,0)'),
Others = x.data.value('Others[1]', 'decimal(18,0)'),
S_Tax = x.data.value('S_Tax[1]', 'decimal(18,0)'),
Amount = x.data.value('Amount[1]', 'decimal(18,0)'),
Initial = x.data.value('Initial[1]', 'Varchar(15)'),
Report_No = x.data.value('Report_No[1]', 'int'),
Rep_Date = x.data.value('Rep_Date[1]', 'smalldatetime')
FROM @CD t
CROSS APPLY t.XMLData.nodes('NewDataSet/LRTest') x(data);
SELECT * From dbo.Trnbal;

THX in advance Mr.RAHUL

gufran90 2-Feb-12 8:18am
   
Ok , Mr.Rahul
i have solved the above said query its look like , Now
i want to run this query using vb.net 2008 ,
can u help me regarding this last but not least time..
THX in advance..

use master
Go
DECLARE @CD TABLE (XMLData XML);
INSERT INTO @CD
SELECT *
FROM OPENROWSET(BULK N'D:\fxmlcon.xml', SINGLE_BLOB) rs;

INSERT INTO Master.dbo.TrnBal (LR_no, LR_Date, Bkg_Stn, FrmShort, Dst, ToShort, Consignor_Name, Consignee_Name, Pvt_Mark, Discription, Article,
Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,S_Tax,Amount,Initial,Report_No,Rep_Date)

SELECT LR_No = x.data.value('LR_No[1]', 'int'),
LR_Date = x.data.value('LR_Date[1]', 'Varchar(50)'),
Bkg_Stn = x.data.value('Bkg_Stn[1]', 'Varchar(30)'),
FrmShort = x.data.value('FrmShort[1]', 'Varchar(5)'),
Dst = x.data.value('Dst[1]', 'Varchar(30)'),
ToShort = x.data.value('ToShort[1]', 'Varchar(5)'),
Consignor_Name = x.data.value('Consignor_Name[1]', 'Varchar(30)'),
Consignee_Name = x.data.value('Consignee_Name[1]', 'Varchar(30)'),
Pvt_Mark = x.data.value('Pvt_Mark[1]', 'Varchar(20)'),
Discription = x.data.value('Discription[1]', 'Varchar(20)'),
Article = x.data.value('Article[1]', 'decimal(18,0)'),
Weight = x.data.value('Weight[1]', 'decimal(18,0)'),
Value= x.data.value('Value[1]', 'decimal(18,0)'),
Pmt_Mode = x.data.value('Pmt_Mode[1]', 'Varchar(5)'),
DoorDel = x.data.value('DoorDel[1]', 'Varchar(5)'),
LR_Remark = x.data.value('LR_Remark[1]', 'Varchar(50)'),
Freight = x.data.value('Freight[1]', 'decimal(18,0)'),
BC = x.data.value('BC[1]', 'decimal(18,0)'),
Handling = x.data.value('Handling[1]', 'decimal(18,0)'),
DDel = x.data.value('DDel[1]', 'decimal(18,0)'),
LC = x.data.value('LC[1]', 'decimal(18,0)'),
Others = x.data.value('Others[1]', 'decimal(18,0)'),
S_Tax = x.data.value('S_Tax[1]', 'decimal(18,0)'),
Amount = x.data.value('Amount[1]', 'decimal(18,0)'),
Initial = x.data.value('Initial[1]', 'Varchar(15)'),
Report_No = x.data.value('Report_No[1]', 'int'),
Rep_Date = x.data.value('Rep_Date[1]', 'smalldatetime')
FROM @CD t
CROSS APPLY t.XMLData.nodes('NewDataSet/LRTest') x(data);
SELECT * From dbo.Trnbal;

What i want in vb.net is user just input the FIle name of xml document
and press the button
on button press event i want to run this query.....
Please help me...?????
RDBurmon 2-Feb-12 8:38am
   
Read this

http://www.fryan0911.com/2009/06/vbnet-how-to-update-record-on-sql.html

Or revert back if you need more help
--Rahul D.
gufran90 6-Feb-12 3:29am
   
Thx for reply Mr.Rahul

i have look at above said link , but that article is about update in sql via vb.net ,
Did u have sample code for my query how use the abouve said query via vb.net-2008.

Please help me... waiting for reply?????
RDBurmon 6-Feb-12 3:37am
   
Ok fine . I have Vb.net Code . I will modify it as per your query and give you ASAP.
RDBurmon 6-Feb-12 4:16am
   
Ok Follow this step :

I would suggest try this in separate console application first and learn how it works

1) Create below procedure in database

USE [TST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [SaveTrnBal]
@filepath AS NVARCHAR(255)
AS
BEGIN

DECLARE @CD TABLE (XMLData XML);
DECLARE @sql AS NVARCHAR(MAX)

SET @sql = 'SELECT * FROM OPENROWSET(BULK ''' + @filepath + ''', Single_Blob) as tt '

INSERT INTO @CD
Exec (@sql)

INSERT INTO TST.dbo.TrnBal (LR_no, LR_Date, Bkg_Stn, FrmShort, Dst, ToShort, Consignor_Name, Consignee_Name, Pvt_Mark, Discription, Article,
Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,S_Tax,Amount,Initial,Report_No,Rep_Date)
SELECT LR_No = x.data.value('LR_No[1]', 'int'),
LR_Date = x.data.value('LR_Date[1]', 'Varchar(50)'),
Bkg_Stn = x.data.value('Bkg_Stn[1]', 'Varchar(30)'),
FrmShort = x.data.value('FrmShort[1]', 'Varchar(5)'),
Dst = x.data.value('Dst[1]', 'Varchar(30)'),
ToShort = x.data.value('ToShort[1]', 'Varchar(5)'),
Consignor_Name = x.data.value('Consignor_Name[1]', 'Varchar(30)'),
Consignee_Name = x.data.value('Consignee_Name[1]', 'Varchar(30)'),
Pvt_Mark = x.data.value('Pvt_Mark[1]', 'Varchar(20)'),
Discription = x.data.value('Discription[1]', 'Varchar(20)'),
Article = x.data.value('Article[1]', 'decimal(18,0)'),
Weight = x.data.value('Weight[1]', 'decimal(18,0)'),
Value= x.data.value('Value[1]', 'decimal(18,0)'),
Pmt_Mode = x.data.value('Pmt_Mode[1]', 'Varchar(5)'),
DoorDel = x.data.value('DoorDel[1]', 'Varchar(5)'),
LR_Remark = x.data.value('LR_Remark[1]', 'Varchar(50)'),
Freight = x.data.value('Freight[1]', 'decimal(18,0)'),
BC = x.data.value('BC[1]', 'decimal(18,0)'),
Handling = x.data.value('Handling[1]', 'decimal(18,0)'),
DDel = x.data.value('DDel[1]', 'decimal(18,0)'),
LC = x.data.value('LC[1]', 'decimal(18,0)'),
Others = x.data.value('Others[1]', 'decimal(18,0)'),
S_Tax = x.data.value('S_Tax[1]', 'decimal(18,0)'),
Amount = x.data.value('Amount[1]', 'decimal(18,0)'),
Initial = x.data.value('Initial[1]', 'Varchar(15)'),
Report_No = x.data.value('Report_No[1]', 'int'),
Rep_Date = x.data.value('Rep_Date[1]', 'smalldatetime')
FROM @CD t
CROSS APPLY t.XMLData.nodes('NewDataSet/LRTest') x(data);

END


2) Create one application and copy-paste below code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace CP_322265_Bulk_load_xml_file_to_sql_server_2005_table
{
class Program
{
static void Main(string[] args)
{

SqlConnection conn = null;
SqlDataReader rdr = null;

try

{



// create and open a connection object
conn = new
SqlConnection("Server=MDT765;DataBase=TST;User Id=TestUser;Password=TestUser@123;Integrated Security=SSPI");
conn.Open();

// 1. create a command object identifying
// the stored procedure
SqlCommand cmd = new SqlCommand(
"SaveTrnBal", conn);

// 2. set the command object so it knows
// to execute a stored procedure
cmd.CommandType = CommandType.StoredProcedure;

// 3. add parameter to command, which
// will be passed to the stored procedure
cmd.Parameters.Add(
new SqlParameter("@filepath", @"D:\fxmlf.xml"));

// execute the command
rdr = cmd.ExecuteReader();

// iterate through results, printing each to console
while (rdr.Read())
{
Console.WriteLine("Sucess");
}
}
finally
{
if (conn != null)
{
conn.Close();
}
RDBurmon 6-Feb-12 4:18am
   
Hope this helps , If yes then accept and vote the answer otherwise revert back with your queries
--Rahul D.
gufran90 7-Feb-12 8:47am
   
Thanks a lot for your reply Mr.RAHUL

Now as per your suggestion i have created the Procedure
(SaveTrnBal) successfully.

But you have given me a code in C# , i want to run the same
in Vb.net 2008 ( Windows App. )

And i know you can do the same code in vb.net ,

Finally the last but not least time you have supported me a lot,

i am to close to complete the event with your help ofcourse.

waiting for your reply,

Thanku very much.
RDBurmon 7-Feb-12 9:26am
   
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Dim lreturn As Boolean = True

Try
con.ConnectionString = "Server=MDT765;DataBase=TST;User Id=TestUser;Password=TestUser@123;Integrated Security=SSPI"
con.Open()
cmd.Connection = con
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "SaveTrnBal"
cmd.Parameters.Add("@filepath", SqlDbType.NVarChar)

cmd.Parameters("@filepath").Direction = ParameterDirection.Input
cmd.Parameters("@filepath").Value = "D:\fxmlf.xml"
cmd.ExecuteNonQuery()
Console.Write("Success")
Catch ex As Exception
lreturn = False
Console.Write("Error")
Finally
con.Close()
End Try

Hope this helps , If yes then accept and vote the answer otherwise revert back with your queries
--Rahul D.
gufran90 8-Feb-12 3:56am
   
You are a genius brother , you have help me a lot,

Thanks a lot to solve my problem , its a pleasure to have a conversation with you ,

in future if a want your more help with this project can i contact you, via email or ..

if yes then please give me a test mail on my ID ,
may god bless you

MAIL ID : imran_patni90@yahoo.co.in

Thanks again
RDBurmon 8-Feb-12 4:06am
   
Thanks for overwhelming response. I will get back to you.
Any way where you are working on ?
gufran90 16-Feb-12 3:39am
   
sorry , for the let ...
i am working in a logistic company in Hyderabad , as an accountant ,
but programming in vb.net is my hobby ,
and i am developing small inventory application for my company.
with my concept.
so please remember me in your pray , and i dont no what i am doing
is application is standard or not.
Thanks.
RDBurmon 16-Feb-12 4:00am
   
I would be happy to be a part of your project life cycle.
gufran90 16-Feb-12 4:11am
   
its my pleasure to have you with my project ,
and i have your mail id , i keep in touch with you.
RDBurmon 16-Feb-12 4:13am
   
No prob

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900