Đặt làm trang chủ     Ghi nhớ (bookmark)     RSS     Đăng ký     Đăng nhập ?>

PN2design ’s Blog

Internet is my life - Thủ thuật IT
Tháng mười 22nd, 2008 bỡi admin

Test

Test

Hãy Đăng nhập hoặc Đăng ký để xem được nội dung này.


Test

Tháng mười 20th, 2008 bỡi admin

BindingNavigator và nút Delete, cách confirm

Cách đưa ra câu hỏi xác nhận việc xóa một dòng dữ liệu khi bạn click nút xóa trên BindingNavigator tự phát sinh khi bạn kéo DataSource và form design (phát sinh mã tự động)

  1.     Private Shared Sub Row_Deleting(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)
  2.         If MessageBox.Show("Bạn có chắc mình muốn XÓA?", "Xác nhận việc xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
  3.             e.Row.RejectChanges()
  4.         End If
  5.     End Sub
  1. AddHandler Me.PN2ProductManagerDataSet.Tables("tblPhieuBaoGiaHangHoa").RowDeleted, AddressOf Row_Deleting
Tháng mười 20th, 2008 bỡi admin

Vray 1.5 rc2 đây

Cái này thằng Nhuận bạn mình nó muốn mà tải chưa được. Tìm giúp nó, sẵn up lên đây luôn, ai muốn thì down nhé. Đường truyền siêu nhanh :P. Tải đê: (Chú ý, các bạn nên quét virus trước khi dùng nhé. Vì máy mình không sử dụng soft diệt virus nên chưa quét giúp bạn được)

Download

Tháng mười 17th, 2008 bỡi admin

Inserting New Records into a Dataset

In order to add new records into a dataset, a new data row must be created and added to the DataRow collection of a data table. The following procedure details how to insert additional rows into a DataTable object in a dataset. For this example, it is assumed the ExistingTable is in a dataset and has two columns named FirstName and LastName.

To add new records to a typed or untyped dataset

Call a data table’s NewRow method to create a new, blank record. This new record inherits its column structure from the data table’s DataColumnCollection.
' Visual Basic
Dim anyRow as DataRow = ExistingTable.NewRow

// C#
DataRow anyRow = ExistingTable.NewRow();

Update the new row as if it were an existing record.
' Visual Basic
anyRow(0) = "Money"
anyRow(1) = "Phan"
' or
anyRow("FirstName") = "Money"
anyRow("LastName") = "Phan"

// C#
anyRow[0] = “Money”;
anyRow[1] = “Phan”;
// or
anyRow["FirstName"] = “Money”;
anyRow["LastName"] = “Phan”;

Inserting New Records with Typed Datasets
' Visual Basic
ExistingTable.Rows.Add(anyRow)

// C#
ExistingTable.Rows.Add(anyRow);

Typed datasets expose the column names as properties of the DataRow object.

To add new records using typed datasets

* The following example illustrates the same three steps above, except this time the code is modified for use with a typed dataset:

Add the new record to the table by calling the Add method of the DataRowCollection object.

' Visual Basic
Dim anyRow as DataRow = DatasetName.ExistingTable.NewRow
anyRow.FirstName = "Jay"
anyRow.LastName = "Stevens"
ExistingTable.Rows.Add(anyRow)

// C#
DataRow anyRow = DatasetName.ExistingTable.NewRow();
anyRow.FirstName = "Jay";
anyRow.LastName = "Stevens";
ExistingTable.Rows.Add(anyRow);

Tháng mười 17th, 2008 bỡi admin

.NET Format String

“I see stuff like {0,-8:G2} passed in as a format string. What exactly does that do?” — Very Confused String Formatter

The above format can be translated into this:

“{<argument index>[,<alignment>][:<formatString><zeros>]}”

argument index: This represent which argument goes into the string.

String.Format(“first = {0};second = {1}”, “apple”, “orange”);

String.Format(“first = {1};second = {0}”, “apple”, “orange”);

gives the following strings:

“first = apple;second = orange”

“first = orange;second = apple”

alignment (optional): This represent the minimal length of the string.

Postive values, the string argument will be right justified and if the string is not long enough, the string will be padded with spaces on the left.

Negative values, the string argument will be left justied and if the string is not long enough, the string will be padded with spaces on the right.

If this value was not specified, we will default to the length of the string argument.

String.Format(“{0,-10}”, “apple”);      //”apple     “

String.Format(“{0,10}”, “apple”);       //”     apple”

format string (optional): This represent the format code.

Numeric format specifier is available here. (e.g. C, G…etc.)
Datetime format specifier is available here.

Enumeration format specifier is available here.

Custom Numeric format specifier is available here. (e.g. 0. #…etc.)

Custom formatting is kinda hard to understand. The best way I know how to explain something is via code:

int pos = 10;

int neg = -10;

int bigpos = 123456;

int bigneg = -123456;

int zero = 0;

string strInt = “120ab”;

String.Format(“{0:00000}”, pos);      //”00010″

String.Format(“{0:00000}”, neg);      //”-00010″

String.Format(“{0:00000}”, bigpos);   //”123456″

String.Format(“{0:00000}”, bigneg);   //”-123456″

String.Format(“{0:00000}”, zero);     //”00000″

String.Format(“{0:00000}”, strInt);   //”120ab”

String.Format(“{0:#####}”, pos);      //”10″

String.Format(“{0:#####}”, neg);      //”-10″

String.Format(“{0:#####}”, bigpos);   //”123456″

String.Format(“{0:#####}”, bigneg);   //”-123456″

String.Format(“{0:#####}”, zero);     //”"

String.Format(“{0:#####}”, strInt);   //”120ab”

While playing around with this, I made an interesting observation:

String.Format(“{0:X00000}”, pos);      //”A”

String.Format(“{0:X00000}”, neg);      //”FFFFFFF6″

String.Format(“{0:X#####}”, pos);      //”X10″

String.Format(“{0:X#####}”, neg);      //”-X10″

The “0″ specifier works well with other numeric specifier, but the “#” doesn’t. Umm… I think the “Custom Numeric Format String” probably deserve a whole post of it’s own. Since this is only the “101″ post, I’ll move on to the next argument in the format string.

zeros (optional): It actually has a different meaning depending on which numeric specifier you use.

int neg = -10;

int pos = 10;

// C or c (Currency): It represent how many decimal place of zeros to show.

String.Format(“{0:C4}”, pos);      //”$10.0000″

String.Format(“{0:C4}”, neg);      //”($10.0000)”

// D or d (Decimal): It represent leading zeros

String.Format(“{0:D4}”, pos); //”0010″

String.Format(“{0:D4}”, neg); //”-0010″

// E or e (Exponential): It represent how many decimal places of zeros to show.

String.Format(“{0:E4}”, pos); //”1.0000E+001″

String.Format(“{0:E4}”, neg); //”-1.0000E+001″

// F or f (Fixed-point): It represent how many decimal places of zeros to show.

String.Format(“{0:F4}”, pos); //”10.0000″

String.Format(“{0:F4}”, neg); //”-10.0000″

// G or g (General): This does nothing

String.Format(“{0:G4}”, pos); //”10″

String.Format(“{0:G4}”, neg); //”-10″

// N or n (Number): It represent how many decimal places of zeros to show.

String.Format(“{0:N4}”, pos); //”10.0000″

String.Format(“{0:N4}”, neg); //”-10.0000″

// P or p (Percent): It represent how many decimal places of zeros to show.

String.Format(“{0:P4}”, pos); //”1,000.0000%”

String.Format(“{0:P4}”, neg); //”-1,000.0000%”

// R or r (Round-Trip): This is invalid, FormatException is thrown.

String.Format(“{0:R4}”, pos); //FormatException thrown

String.Format(“{0:R4}”, neg); //FormatException thrown

// X or x (Hex): It represent leading zeros

String.Format(“{0:X4}”, pos); //”000A”

String.Format(“{0:X4}”, neg); //”FFFFFFF6″

// nothing: This is invalid, no exception is thrown.

String.Format(“{0:4}”, pos)); //”4″

String.Format(“{0:4}”, neg)); //”-4″

In summary, there are four types of behaviour when using this <zeros> specifier:

Leading Zeros: D, X

Trailing Zeros: C, E, F, N, P

Nothing: G

Invalid: R, <empty>

Now, that we’ve gone through the valid specifiers, you can actually use this in more than just String.Format(). For example, when using this with Byte.ToString():

Byte b = 10;

b.ToString(“D4″);      //”0010″

b.ToString(“X4″);      //”000A”

Wow… this was way longer than I expected. The BCL team is having blog day today, I need to get back to posting something for the BCLWeblog.

Source: http://blogs.msdn.com/kathykam/archive/2006/03/29/564426.aspx

Tháng mười 17th, 2008 bỡi admin

String.Format Method (String, Object)

Replaces the format item in a specified String with the text equivalent of the value of a specified Object instance.
The following code example demonstrates the standard formatting specifiers for numbers, dates, and enumerations.
VB.NET

  1. ' This code example demonstrates the String.Format() method.
  2. ' Formatting for this example uses the "en-US" culture.
  3. Class Sample
  4.    Public Enum Color
  5.       Yellow = 1
  6.       Blue = 2
  7.       Green = 3
  8.    End Enum 'Color
  9.  
  10.    Private Shared thisDate As DateTime = DateTime.Now
  11.  
  12.    Public Shared Sub Main()
  13.  
  14.       ' Store the output of the String.Format method in a string.
  15.       Dim s As String = ""
  16.  
  17.       Console.Clear()
  18.  
  19.       ' Format a negative integer or floating-point number in various ways.
  20.       Console.WriteLine("Standard Numeric Format Specifiers")
  21.       s = String.Format("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
  22.                         "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
  23.                         "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
  24.                         "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
  25.                         "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
  26.                         "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
  27.                         "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
  28.                         "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
  29.                         "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
  30.                         "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
  31.                         - 123, - 123.45F)
  32.       Console.WriteLine(s)
  33.  
  34.       ' Format the current date in various ways.
  35.       Console.WriteLine("Standard DateTime Format Specifiers")
  36.       s = String.Format("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
  37.                         "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
  38.                         "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
  39.                         "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
  40.                         "(f) Full date/short time: . . {0:f}" & vbCrLf & _
  41.                         "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
  42.                         "(g) General date/short time:. {0:g}" & vbCrLf & _
  43.                         "(G) General date/long time: . {0:G}" & vbCrLf & _
  44.                         "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
  45.                         "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
  46.                         "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
  47.                         "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
  48.                         "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
  49.                         "(U) Universal full date/time: {0:U}" & vbCrLf & _
  50.                         "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
  51.                         thisDate)
  52.       Console.WriteLine(s)
  53.  
  54.       ' Format a Color enumeration value in various ways.
  55.       Console.WriteLine("Standard Enumeration Format Specifiers")
  56.       s = String.Format("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
  57.                         "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
  58.                         "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
  59.                         "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
  60.                         "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
  61.                         Color.Green)
  62.       Console.WriteLine(s)
  63.    End Sub 'Main
  64. End Class 'Sample
  65. '
  66. 'This code example produces the following results:
  67. '
  68. 'Standard Numeric Format Specifiers
  69. '(C) Currency: . . . . . . . . ($123.00)
  70. '(D) Decimal:. . . . . . . . . -123
  71. '(E) Scientific: . . . . . . . -1.234500E+002
  72. '(F) Fixed point:. . . . . . . -123.45
  73. '(G) General:. . . . . . . . . -123
  74. '    (default):. . . . . . . . -123 (default = 'G')
  75. '(N) Number: . . . . . . . . . -123.00
  76. '(P) Percent:. . . . . . . . . -12,345.00 %
  77. '(R) Round-trip: . . . . . . . -123.45
  78. '(X) Hexadecimal:. . . . . . . FFFFFF85
  79. '
  80. 'Standard DateTime Format Specifiers
  81. '(d) Short date: . . . . . . . 6/26/2004
  82. '(D) Long date:. . . . . . . . Saturday, June 26, 2004
  83. '(t) Short time: . . . . . . . 8:11 PM
  84. '(T) Long time:. . . . . . . . 8:11:04 PM
  85. '(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
  86. '(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
  87. '(g) General date/short time:. 6/26/2004 8:11 PM
  88. '(G) General date/long time: . 6/26/2004 8:11:04 PM
  89. '    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
  90. '(M) Month:. . . . . . . . . . June 26
  91. '(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
  92. '(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
  93. '(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
  94. '(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
  95. '(Y) Year: . . . . . . . . . . June, 2004
  96. '
  97. 'Standard Enumeration Format Specifiers
  98. '(G) General:. . . . . . . . . Green
  99. '    (default):. . . . . . . . Green (default = 'G')
  100. '(F) Flags:. . . . . . . . . . Green (flags or integer)
  101. '(D) Decimal number: . . . . . 3
  102. '(X) Hexadecimal:. . . . . . . 00000003
  103. '

C#.NET

  1. // This code example demonstrates the String.Format() method.
  2. // Formatting for this example uses the "en-US" culture.
  3.  
  4. using System;
  5. class Sample
  6. {
  7.     enum Color {Yellow = 1, Blue, Green};
  8.     static DateTime thisDate = DateTime.Now;
  9.  
  10.     public static void Main()
  11.     {
  12. // Store the output of the String.Format method in a string.
  13.     string s = "";
  14.  
  15.     Console.Clear();
  16.  
  17. // Format a negative integer or floating-point number in various ways.
  18.     Console.WriteLine("Standard Numeric Format Specifiers");
  19.     s = String.Format(
  20.         "(C) Currency: . . . . . . . . {0:C}\n" +
  21.         "(D) Decimal:. . . . . . . . . {0:D}\n" +
  22.         "(E) Scientific: . . . . . . . {1:E}\n" +
  23.         "(F) Fixed point:. . . . . . . {1:F}\n" +
  24.         "(G) General:. . . . . . . . . {0:G}\n" +
  25.         "    (default):. . . . . . . . {0} (default = 'G')\n" +
  26.         "(N) Number: . . . . . . . . . {0:N}\n" +
  27.         "(P) Percent:. . . . . . . . . {1:P}\n" +
  28.         "(R) Round-trip: . . . . . . . {1:R}\n" +
  29.         "(X) Hexadecimal:. . . . . . . {0:X}\n",
  30.         -123, -123.45f);
  31.     Console.WriteLine(s);
  32.  
  33. // Format the current date in various ways.
  34.     Console.WriteLine("Standard DateTime Format Specifiers");
  35.     s = String.Format(
  36.         "(d) Short date: . . . . . . . {0:d}\n" +
  37.         "(D) Long date:. . . . . . . . {0:D}\n" +
  38.         "(t) Short time: . . . . . . . {0:t}\n" +
  39.         "(T) Long time:. . . . . . . . {0:T}\n" +
  40.         "(f) Full date/short time: . . {0:f}\n" +
  41.         "(F) Full date/long time:. . . {0:F}\n" +
  42.         "(g) General date/short time:. {0:g}\n" +
  43.         "(G) General date/long time: . {0:G}\n" +
  44.         "    (default):. . . . . . . . {0} (default = 'G')\n" +
  45.         "(M) Month:. . . . . . . . . . {0:M}\n" +
  46.         "(R) RFC1123:. . . . . . . . . {0:R}\n" +
  47.         "(s) Sortable: . . . . . . . . {0:s}\n" +
  48.         "(u) Universal sortable: . . . {0:u} (invariant)\n" +
  49.         "(U) Universal full date/time: {0:U}\n" +
  50.         "(Y) Year: . . . . . . . . . . {0:Y}\n",
  51.         thisDate);
  52.     Console.WriteLine(s);
  53.  
  54. // Format a Color enumeration value in various ways.
  55.     Console.WriteLine("Standard Enumeration Format Specifiers");
  56.     s = String.Format(
  57.         "(G) General:. . . . . . . . . {0:G}\n" +
  58.         "    (default):. . . . . . . . {0} (default = 'G')\n" +
  59.         "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
  60.         "(D) Decimal number: . . . . . {0:D}\n" +
  61.         "(X) Hexadecimal:. . . . . . . {0:X}\n",
  62.         Color.Green);      
  63.     Console.WriteLine(s);
  64.     }
  65. }
  66. /*
  67. This code example produces the following results:
  68.  
  69. Standard Numeric Format Specifiers
  70. (C) Currency: . . . . . . . . ($123.00)
  71. (D) Decimal:. . . . . . . . . -123
  72. (E) Scientific: . . . . . . . -1.234500E+002
  73. (F) Fixed point:. . . . . . . -123.45
  74. (G) General:. . . . . . . . . -123
  75.     (default):. . . . . . . . -123 (default = 'G')
  76. (N) Number: . . . . . . . . . -123.00
  77. (P) Percent:. . . . . . . . . -12,345.00 %
  78. (R) Round-trip: . . . . . . . -123.45
  79. (X) Hexadecimal:. . . . . . . FFFFFF85
  80.  
  81. Standard DateTime Format Specifiers
  82. (d) Short date: . . . . . . . 6/26/2004
  83. (D) Long date:. . . . . . . . Saturday, June 26, 2004
  84. (t) Short time: . . . . . . . 8:11 PM
  85. (T) Long time:. . . . . . . . 8:11:04 PM
  86. (f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
  87. (F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
  88. (g) General date/short time:. 6/26/2004 8:11 PM
  89. (G) General date/long time: . 6/26/2004 8:11:04 PM
  90.     (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
  91. (M) Month:. . . . . . . . . . June 26
  92. (R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
  93. (s) Sortable: . . . . . . . . 2004-06-26T20:11:04
  94. (u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
  95. (U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
  96. (Y) Year: . . . . . . . . . . June, 2004
  97.  
  98. Standard Enumeration Format Specifiers
  99. (G) General:. . . . . . . . . Green
  100.     (default):. . . . . . . . Green (default = 'G')
  101. (F) Flags:. . . . . . . . . . Green (flags or integer)
  102. (D) Decimal number: . . . . . 3
  103. (X) Hexadecimal:. . . . . . . 00000003
  104.  
  105. */
Tháng mười 16th, 2008 bỡi admin

Adding Customized Tags in web.config

The web.config file in ASP.NET is the central location for your web applications configuration. It contains settings such as authentication, handler settings, compilation settings, globalization settings, tracing and error settings, etc… But what happens when this is not enough? Or you want to add you own settings into the web.config file. This tutorial will explain how it’s done. To create your own custom configuration handler, it will require two parts: writing some code, and editing your web.config file.

The code
Here we have a small C# file with code to create a new handler that will be used in the web.config file.

  1. using System;
  2. using System.Collections;
  3. using System.Xml;
  4. using System.Configuration;
  5. using System.Web.Configuration;
  6.  
  7. namespace Devhood {
  8.    
  9.     internal class PageStyleHandler:IConfigurationSectionHandler {
  10.         public virtual object Create(Object parent, Object context, XmlNode node) {
  11.             PageStyle config = new PageStyle((PageStyle)parent);
  12.             config.LoadValuesFromConfigurationXml(node);
  13.             return config;
  14.         }
  15.     }
  16.    
  17.     public class PageStyle {
  18.         string _backColour;
  19.        
  20.         internal PageStyle(PageStyle parent) {
  21.             if (parent != null)
  22.                 _backColour = parent._backColour;
  23.         }
  24.        
  25.         internal void LoadValuesFromConfigurationXml(XmlNode node) {
  26.             XmlAttributeCollection attribCol = node.Attributes;
  27.             _backColour = attribCol["backColour"].Value;
  28.         }
  29.        
  30.         public string BackColour {
  31.             get {
  32.                 return _backColour;
  33.             }
  34.         }
  35.     }
  36. }

There are two classes here, the PageStyleHandler class which implements the IConfigurationSectionHandler, and the PageStyle class which is used to store and retrieve the configuration data.
The PageStyleHandler contains the Create method. It is used to create and instance of the PageStyle class to pass the data from the web.config file.
The PageStyle class will accept an XML node which comes from the web.config file, it reads the attribute from the XML node and it will save the data for future retrieval by the BackColour property.

The web.config file
To add your custom handler to the web.config file for this application, it requires simply editing the web.config file so that it will accept your new handler. Your new web.config file will look like this:

  1. <configuration>
  2.     <configSections>
  3.         <sectionGroup name="devhood">
  4.             <section name="pageStyle" type="Devhood.PageStyleHandler, PageStyle" />
  5.         </sectionGroup>
  6.     </configSections>
  7.        
  8.     <devhood>
  9.         <pageStyle backColour="navy" />
  10.     </devhood>
  11. </configuration>

Note that this example will only apply to the web application that this file resides in. If you would like this new handler to apply to all web applications on this server, the tag can be moved to the machine.config.

An example usage in an ASPX page
Here is an example of our new custom handler in action:

  1.   <%@ Import Namespace="Devhood" %>
  2.  
  3. <html>
  4.     <head>
  5.         <title>ASP.NET Configuration</title>
  6.         <script language="C#" runat="server">
  7.             void Page_Load(Object sender, EventArgs e) {
  8.                 PageStyle _pageStyle;
  9.                 _pageStyle = (PageStyle) Context.GetConfig("devhood/pageStyle");
  10.                 bodyTag.Attributes["bgcolor"] = _pageStyle.BackColour;
  11.             }
  12.         </script>
  13.     </head>
  14.     <body id="bodyTag" runat="server">
  15.         <table bgcolor="white" align="center" width="400"><tr><td>
  16.         <p align="center">
  17.             <font size=+2>This background is Navy!</font>
  18.         </p>
  19.         <p align="center">
  20.             <font size=+2>Created for <a href="http://www.devhood.com">www.devhood.com</a></font>
  21.         </p>
  22.         </td></tr></table>
  23.     </body>
  24. </html>

The custom configuration handler in ASP.NET is a useful addition for creating really flexible web pages. Usage for custom configuration handlers can be for: allowing the web applications style to be defined in one web.config file, saving information that is commonly used (ie. DSN), and whatever else you can think of.

Copyright © 2001 Andrew Ma. at devhood.com