17.8.09

Dataset To XML và XML to Dataset, Object To XML và XML to Object

Khi cần chuyển dữ liệu qua webservice, do yêu cầu bảo mật dữ liệu, ta có thể mã hóa dữ liệu cho từng trường, nhưng như vậy cấu trúc dữ liệu vẫn có thể bị lộ. Giải pháp là chuyển dữ liệu về dạng XML (chuyển hẳn về dạng string) và sau đó convert lại. Sau đây là các hàm convert cực đơn giản để phục vụ việc này:

Dataset To XML và XML to Dataset

public static string DataSetToString(DataSet ds)

{

StringWriter stringWriter = new StringWriter();

ds.WriteXml(stringWriter);

return stringWriter.ToString();

}

public static DataSet StringToDataSet(string str)

{

DataSet ds = new DataSet();

try

{

XmlDocument doc = new XmlDocument();

doc.LoadXml(str);

ds.ReadXml(new XmlNodeReader(doc));

}

catch { }

return ds;

}

Object To XML và XML to Object

public static object Xml2Object(string xml, System.Type objType)

{

StringReader stream = null;

XmlTextReader reader = null;

try

{

// serialise to object

XmlSerializer serializer = new XmlSerializer(objType);

stream = new StringReader(xml); // read xml data

reader = new XmlTextReader(stream); // create reader

// covert reader to object

return serializer.Deserialize(reader);

}

catch

{

return null;

}

finally

{

if (stream != null) stream.Close();

if (reader != null) reader.Close();

}

}

public static string Object2Xml(object obj)

{

MemoryStream stream = null;

TextWriter writer = null;

try

{

stream = new MemoryStream(); // read xml in memory

writer = new StreamWriter(stream, Encoding.Unicode);

// get serialise object

XmlSerializer serializer = new XmlSerializer(obj.GetType());

serializer.Serialize(writer, obj); // read object

int count = (int)stream.Length; // saves object in memory stream

byte[] arr = new byte[count];

stream.Seek(0, SeekOrigin.Begin);

// copy stream contents in byte array

stream.Read(arr, 0, count);

UnicodeEncoding utf = new UnicodeEncoding(); // convert byte array to string

return utf.GetString(arr).Trim();

}

catch

{

return string.Empty;

}

finally

{

if (stream != null) stream.Close();

if (writer != null) writer.Close();

}

}

5.8.09

Cầu Mirabeau - Le pont Mirabeau

Tác giả:Guillaume Apollinaire
Người dịch: Phan Cẩm Thịnh

Dưới cầu Mirabeau êm đềm trôi dòng Seine
Trôi cả tình yêu của anh và em
Không biết anh có còn nên nhớ
Niềm vui sẽ đến theo sau nỗi ưu phiền

Giờ cứ điểm, đêm cứ đến gần
Tháng ngày trôi, đây vẫn còn anh

Mặt đối mặt và tay trong tay nhau
Vòng tay ta như cầu
Dưới cầu dòng nước chảy
Ánh mắt rã rời vì li biệt dài lâu

Giờ cứ điểm, đêm cứ đến gần
Tháng ngày trôi, đây vẫn còn anh

Tình ra đi như dòng nước trôi nhanh
Tình yêu của em và anh
Cuộc đời ơi, sao mà chậm rãi
Hy vọng sao mà dữ dội cuồng điên

Giờ cứ điểm, đêm cứ đến gần
Tháng ngày trôi, đây vẫn còn anh

Vẫn trôi đều ngày tuần, tháng năm
Quá khứ và tình yêu quay trở lại không còn
Chỉ một điều không bao giờ thay đổi
Dưới cầu Mirabeau êm đềm trôi dòng Seine

Giờ cứ điểm, đêm cứ đến gần
Tháng ngày trôi, đây vẫn còn anh

Binding DateTime with CultureInfo

Khi binding các trường có kiểu datatype là datetime thì thường báo lỗi không convert được kiểu string sang kiểu datetime. Cần convert theo CultureInfo tại sự kiện item updating

protected void DetailView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)

{

e.NewValues["ExpireDate"] = DateTime.Parse

((string)e.NewValues["ExpireDate"]).ToString(CultureInfo.InvariantCulture);

}

3.8.09

Cannot start Microsoft Office Outlook. Cannot open the Outlook window

Khi mở outlook gặp lỗi
"Cannot start Microsoft Office Outlook. Cannot open the Outlook window"

Start->run chạy "Outlook.exe /resetnavpane"