Life, SAP, Consulting, Programming, Coding, ASP.NET, Sharepoint, MVC, Javascript, PHP, WebDesign, CSS, HTML

Archive for the ‘dot net’ Category

Tìm hiểu về Schema.xml files

Tìm hiểu về Schema.xml files

Mỗi List Definition xuất hiện trong Create Page có một file Schema.xml được lưu trữ trong một thư mục con của %Program Files\Common Files\Microsoft Shared\web server extesions\12\TEMPLATES\FEATURES. Hoặc là được deployed như là một phần của một Sandboxed Solution. File Schema.xml định nghĩa View, Form, Toolbar va nhưng Field đặc biệt cho List được tạo ra từ List definition đó.

Chức năng của Schema.xml trong việc định nghĩa List Defintion

Những công việc sau đây có thể được triển khai trong Schema.xml trong tùy biến một List Definition:

  • Thêm một Custom Field dựa trên một Field type được định nghĩa trong FldTypes.xml
  • Tạo Custom View cho List được tạo ra từ List Definition
  • Chỉ định Custom Form page cho List Items
  • Thêm mô tả mặc định cho List được tạo ra, hiển thị trong UI

Khi làm việc với List Definition, không nên chỉnh sửa những File Schema có sẵn, vì nếu làm như thế có thể phá vỡ những List đang tồn tại, File đó cũng có nguy cơ bị ghi đè khi nâng cấp, hay cập nhật Sharepoint. Vì thế nên tạo mới Custom List Definition Feature với file Schema.xml bằng cách copy từ file có sẵn mà không nên chỉnh sửa file có sẵn.

Định dạng File

List Element

Thành phần ngoài nhất là List, định nghĩa tên bên trong và tên hiển thị cho List definition cũng như là hướng hiển thị (direction)của text trong các lists, và địa chỉ tương đối với những Lists đã được tạo ra.

<List

xmlns:ows=”Microsoft SharePoint”

Title=”Tasks”

FolderCreation=”FALSE”

Direction=”$Resources:Direction;”

EnableContentTypes=”TRUE”

Url=”Lists/Tasks”

BaseType=”0″>

 

Site-relative URL cũng như các thuộc tính khác của List Element chỉ định nghĩa tương đối và không rõ ràng vì chúng bị override bởi List setting trong Onet.xml của Site Definition. Thuộc tính BaseType định nghĩa loại cơ sở cho List, được giới hạn với những Loại basetype được định nghĩa trong <BaseTypes> của File Onet.xml

MetaData Element

Metadata element nhóm danh sách những metadata trong một List Element và có thể chứa nhiều Element con.

ContentTypes Element

ContentTypes Element định nghĩa content types được sử dụng trong những Lists mà được tạo ra từ chính List definition hiện tại.

<MetaData>

<ContentTypes>

<ContentTypeRef ID=”0x0108″>

<Folder TargetName=”Task” />

</ContentTypeRef>

<ContentTypeRef ID=”0x0120″ />

<ContentTypeRef ID=”0x012004″ />

</ContentTypes>

 

Fields Element

Element Fields chứa các định nghĩa cho những filed đặc biệt có thể chứa trong List definition

<Fields>

  <Field 

    ID="{c3a92d97-2b77-4a25-9698-3ab54874bc6f}" 

    Name="Predecessors" 

    Type="LookupMulti" 

    Mult="TRUE" 

    Required="FALSE" 

    DisplayName="$Resources:core,Tasks_Predecessors;" 

    StaticName="Predecessors" 

    List="Self" 

    ShowField="Title" 

    DisplaceOnUpgrade="TRUE" 

    SourceID="http://schemas.microsoft.com/sharepoint/v3">

  </Field>

  <Field 

    ID="{a8eb573e-9e11-481a-a8c9-1104a54b2fbd}" 

    Type="Choice" 

    Name="Priority" 

    DisplayName="$Resources:core,Priority;" 

    SourceID="http://schemas.microsoft.com/sharepoint/v3" 

    StaticName="Priority">

    <CHOICES>

      <CHOICE>$Resources:core,Priority_High;</CHOICE>

      <CHOICE>$Resources:core,Priority_Normal;</CHOICE>

      <CHOICE>$Resources:core,Priority_Low;</CHOICE>

    </CHOICES>

    <MAPPINGS>

      <MAPPING Value="1">$Resources:core,Priority_High;</MAPPING>

      <MAPPING Value="2">$Resources:core,Priority_Normal;</MAPPING>

      <MAPPING Value="3">$Resources:core,Priority_Low;</MAPPING>

    </MAPPINGS>

    <Default>$Resources:core,Priority_Normal;</Default>

  </Field>

  ...

  <Field  

    ID="{d2311440-1ed6-46ea-b46d-daa643dc3886}" 

    Type="Number" 

    Name="PercentComplete" 

    Percentage="TRUE" 

    Min="0" 

    Max="1" 

    DisplayName="$Resources:core,Percent_Complete;" 

    SourceID="http://schemas.microsoft.com/sharepoint/v3" 

    StaticName="PercentComplete">

  </Field>

  <Field 

    ID="{53101f38-dd2e-458c-b245-0c236cc13d1a}" 

    Type="User" 

    List="UserInfo" 

    Name="AssignedTo" 

    DisplayName="$Resources:core,Assigned_To;" 

    SourceID="http://schemas.microsoft.com/sharepoint/v3" 

    StaticName="AssignedTo">

  </Field>

  ...

</Fields>

 

Mỗi Field Element định nghĩa một tên hiển thị và một tên hệ thống (internal name), một Field type (Type) và một số thuộc tính khác như là “Required”

Views Element

Thành phần Views chứa những định nghĩa cho Views mà có thể có trong List ngay khi nó được tạo ra.

<Views>

  ...

  <View 

    BaseViewID="2" 

    Type="HTML" 

    WebPartZoneID="Main" 

    DisplayName="$Resources:core,My_Tasks;" 

    MobileView="True" 

    MobileDefaultView="True" 

    SetupPath="pages\viewpage.aspx" 

    ImageUrl="/_layouts/images/issues.png" 

    Url="MyItems.aspx" 

    ReqAuth="TRUE">

  <XslLink Default="TRUE">main.xsl</XslLink>

  <RowLimit Paged="TRUE">30</RowLimit>

  <Toolbar Type="Standard" />

  <ViewFields>

    <FieldRef Name="LinkTitle"></FieldRef>

    <FieldRef Name="Status"></FieldRef>

    <FieldRef Name="Priority"></FieldRef>

    <FieldRef Name="DueDate"></FieldRef>

    <FieldRef Name="PercentComplete"></FieldRef>

  </ViewFields>

  <ParameterBindings>

    <ParameterBinding 

      Name="NoAnnouncements" 

      Location="Resource(wss,noXinviewofY_LIST)" />

    <ParameterBinding 

        Name="NoAnnouncementsHowTo" 

        Location="Resource(wss,noXinviewofY_DEFAULT)" />

  </ParameterBindings>

  <Query>

    <Where>

      <Eq>

        <FieldRef Name="AssignedTo"></FieldRef>

        <Value Type="Integer">

          <UserID />

        </Value>

      </Eq>

    </Where>

    <OrderBy>

      <FieldRef Name="Status"></FieldRef>

      <FieldRef Name="Priority"></FieldRef>

    </OrderBy>

  </Query>

</View>

  ...

</Views>

 

Mỗi thành phần View định nghĩa một loại hiển thị (Thông thường là HTML) và một ID duy nhất cho View. Khi một View được hiển thị trong một Webpart, View element cũng định nghĩa View Title,. Thuộc tính URL được sử dụng trong việc tạo ra List Definition chỉ định File aspx mà view sẽ được hiển thị trong đó.View cũng định nghĩa Webpart zone ID của Webpart mà nó sẽ được hiển thị.

Trong Sharepoint, View có thể chứa nhiều thành phần con, định nghĩa nhiều phần khác của View

  • Aggregations định nghĩa trường tham chiếu cho cột calculated.
  • XslLink định nghĩa XSL file định nghĩa nhiều phần khác của View, ví dụ header, body, footer, cũng như là nhóm theo vùng, rowsets (thành phần định nghĩa hiển thị các mục như thế nào khi mà số các dòng đạt đến giới hạn dòng và những vùng view trống)
  • RowLimit
  • Toolbar: định nghĩa vùn hiển thị phía trên List.
  • ViewFields: định nghĩa các Field hiển thị trong View
  • ParameterBindings: định nghĩa chuỗi cài đặt XSLT.
  • Query: định nghĩa Filer cho view

 

Form Elements

Chứa tham chiếu đến những Form được riêng biệt khi làm việc với những List Items khác nhau

<Forms>

  <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />

  <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />

  <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />

</Forms>

 

Mỗi Form element định nghĩa loại Form, có thể là DisplayForm, EditForm, NewForm cũng như là tên của File ASPX được sử dụng cho form đó và các Id của Webpart Zone mà Form sẽ hiển thị.

DefaultDescription Element

Định nghĩa mô tả mặc định hiển thị trong UI

<DefaultDescription>$Resources:core,camlidT13;</DefaultDescription>

Thuộc tính này sẽ bị ghi đè bởi huộc tính trong Onet.xml

List Templates

Người dùng có thể định nghĩa List Template mới bằng cách lưu lại môt template sẵn có. Sử dụng Save as Template trong Sharepoint để định lưu lại thành file .stp. Sau đó download về, up lên site mới để cài đặt.

Advertisements

Best practices for using ADO.NET

Thấy bài viết này trên MSDN mặc dù bài viết từ năm 2002, tuy nhiên đây là bài viết bổ ích nên mình dịch ra tiếng Việt cho mọi người cùng tham khảo.

Bài viết này cung cấp cho bạn những giải pháp tốt nhất để đạt được hiệu suất tối đa, khả năng mở rộng và tận dụng các chức năng hỗ trợ khi cài đặt ứng dụng MS ADO.NET. Bài viết cũng thảo luận những kinh nghiệm thực tiễn trong việc sử dụng các đối tượng được hỗ trợ trong ADO.NET và đề xuất những kỹ thuật giúp bạn tận tối ưu thiết kế của ứng dụng ADO.NET

Bài viết bao gồm các phần:

  • Giới thiệu về .NET Framework và các projvider trong .NET Framework
  • So sánh giữa DataSetDataReader, thảo luận các tình huống sử dụng của 2 loại đối tượng
  • Giải thích cách sử dụng DataSet, CommandsConnections.
  • Tích hợp ADO.NET với XML
  • Những kỹ thuật nhỏ khi sử dụng và các vấn đề khác

.NET Framework Data Providers

Một Data provider trong .NET Framework là cầu nối giữa các ứng dụng và nguồn dữ liệu. Một .NET Framework data provider cho phép bạn lấy kết quả một truy vấn từ nguồn dữ liệu, thực thi các lệnh tại nguồn dữ liệu và đồng bộ những thay đổi trong DataSet với nguồn dữ liệu. Bài viết này hướng dẫn để sử dụng .NET Framework Data Provider một cách thích hợp nhất với nhu cầu sử dụng của bạn.

Sử dụng Data Provider nào cho phù hợp?

Xin được bỏ qua phần này. Những điểm chính cần lưu ý đó là Provider hay sử dụng nhất với MS Sql Server hiện tại là SQL Server Provider ( System.Data.SqlClient namespace)(MS SQL Server 7.0 trở lên). Với những Database Server cũ hơn, hoặc với Access database, nên sử dụng OLE DB .NET Data Provider (System.Data.OleDb namespace). Một loại nữa hay gặp là ODBC .NET Data provider(Microsoft.Data.Odbc namespace) cho những Data Source sử dụng ODBC để kết nối. Oracle cũng có Provider được cung cấp thêm từ site của MS (System.Data.OracleClient namespace). NET Framework cũng hỗ trợ cài đặt Custom Provider cho những Data Source đặc biệt dựa trên môt bộ các interfaces.

Kết nối đến cơ sở dữ liệu SQL Server 7.0 hoặc cao hơn

Để đạt được hiệu suất hoạt động cao nhất khi kết nối đến MSSQL Server 7.0 hoặc cao hơn, sử dụng SQL Server .NET Data Provider. Provider này được thiết kế để truy cập trực tiếp đến SQL Server mà không qua một lớp kỹ thuật nào khác. Sơ đồ sau minh họa các kỹ thuật được sử dụng để truy cập đến SQL Server

Kết nối đến ODBC Data Sources

ODBC .NET Data Provider được cung cấp trong namespace Microsoft.Data.Odbc, có cùng kiến trúc như .NET Data Provider for SQL Server và OLE DB. ODBC .NET Data Provider tuân thủ quy ước đặt tên sử dụng tiền tố “ODBC”(ví dụ OdbcConnection) và sử dụng chuỗi kết nối ODBC chuẩn.

Làm việc với DataReader, DataSet, DataAdapter và DataView

ADO.NET cung cấp 2 đối tượng để tiếp nhận dữ liệu quan hệ và lưu trữ trong bộ nhớ: DataSet DataReader. DataSet cung cấp một đại diện cho dữ liệu trong bộ nhớ, một tập toàn bộ dữ liệu bao gồm cả các bảng có ràng buộc, sắp xếp, cũng như là quan hệ giữa các bảng đó. DataReader cung cấp dòng một chiều, chỉ-đọc của CSDL.

Khi sử dụng một DataSet, bạn thường sử dụng DataAdapter (và có thể có cả CommandBuilder) để tương tác với nguồn dữ liệu. Khi sử dụng DataSet, bạn cũng có thể sử dụng thêm môt DataView để sắp xếp, lọc dữ liệu trong DataSet. DataSet cũng có thể được thừa kế để tạo ra môt loại DataSet để cung cấp các bảng, hàn, cột như là những thuộc tính.

DataSet vs. DataReader

Để quyết định sử dụng DataSet hay là DataReader khi thiết kế ứng dụng, hãy xem xét các mức chức năng cần đến trong ứng dụng.

Sử dụng DataSet trong những trường hợp sau:

  • Cần duyệt qua nhiều bảng khác nhau trong kết quả.
  • Thao tác với dữ liệu từ nhiều nguồn (ví dụ dữ liệu được lấy từ nhiều CSDL, từ các file XML và từ DataSheet).
  • Có sự trao đổi dữ liệu giữa các Tiers và sử dụng XML Webservice. Không giống như DataReader, DataSet có thể được truyền qua mạng.
  • Sử dụng lại môt tập các hàng để đạt được hiệu suất hoạt động, bằng cách cache lại (như là để sắp xếp, lọc dữ liệu)
  • Thực hiện một lượng xử lý lớn trên các dòng. Những xử lý mở rộng trên mỗi dòng được trả về khi sử dụng DataReader buộc chặt các kết nối đang phục vụ cho DataReader dài hơn bình thường, vì thế sẽ ảnh hưởng đến hiệu suất.
  • Xử lý dữ liệu sử dụng các operations của XML như là Extensible StyleSheet Language Transformations(XLST) hay là Xpath queries.

Sử dụng DataReader khi:

  • Không cần phải cached dữ liệu
  • Đang xử lý một tập kết quả quá lớn để lưu trong bộ nhớ.
  • Cần một kết nối nhanh, dùng một lần, chỉ-có-chiều-gửi-đi và chỉ-đọc

Chú ý DataAdapter sử dụng DataReader khi đổ dữ liệu cho một DataSet . Vì thế, hiệu suất được tăng lên khi sử dụng DataReader thay cho DataSet chính là bạn sẽ tiết kiệm được không gian bộ nhớ. Tuy nhiên, sự tăng hiệu suất này là không đáng kể vì thế bạn cần phải quyết định thiết kế dựa vào những chức năng được yêu cầu của ứng dụng.

<Hết phần 1>

Site Defintion_ Vài điều góp nhặt

Site Definition

Site Definition là cơ sở cho các sites, User Template được xây dựng và cài đặt. Site Definition là một tập các file aspx và xml. Dùng Site Definition để định nghĩa trước các thành phần được kèm theo khi tạo một site mới. Các thành phần đó bao gồm: Webparts, Lists, Features, và Navigation Bar. Các thành phần này sẽ được activate khi Site được tạo. Một giải pháp thông thường sẽ có 1 site definition và nhiều Features đi kèm.

Thông thường, cách dễ nhất để tạo Site Defition là custom cái có sẵn là Portal Site và Default blank site.

Site Definition có 2 file XML chính là Onet.XML và Webtemp*.XML. Trong đó * có thể là tên của dự án bạn đang tạo. Onet.XML là chứa các định nghĩa liên quan trực tiếp đến Site Definition. Còn WebTemp.XML là file cấu hình, dùng để khai báo Site Definition với Sharepoint khi bạn tạo Site mới.

Thư mục chứa của Onet.xml là \12\TEMPLATE\SiteTemplates\Site_def_name. Còn thư mục chứa của Webtemp.XML là \12\TEMPLATE\{lcid}\XML , với lcid là id của ngôn ngữ sharepoint đang sử dụng. Mặc định với site tiếng anh là 1033.

    Có thể có Một Site configuration cho nhiều Site Definition và ngược lại(Cái này không rõ lắm, chỉ đọc được như thế thôi)

 

Các chú ý khi tạo Webtemp*.xml

  • Sử dụng file mẫu Webtemp.xml để tạo copy Webtemp*.xml.
  • Thuộc tính Name của thành phần <Template > phải trùng với tên thư mục chứa Site Definition trong \SiteTemplates.
  • ID của <Template> cũng phải là ID duy nhất và ID>10000. Các Configuration trong Sharepoint có ID <10000.
  • ImageUrl có thể chỉ đến file trong 12\Template\Images. (“/_layout/images/abc.png”). Thuộc tính này của <Configuration> cho phép đăng Preview của Site bạn sẽ tạo.
  • DisplayCategory: Chỉ định Tab mà site được xếp vào khi khởi tạo. Ví dụ :Meetings/Portal/….

Cấu trúc của thư mục chưa Site Definition:

  • Thư mục Lists: Chứa các định nghĩa Lists đi kèm site def. Trong đó là các thư mục con chứ định nghĩa list
  • Thư mục XML: chứa file Onet.XML.
  • Các file aspx (default.aspx, login.aspx) và file images

Các bước thực hiện tạo Site Def mới:

  • Copy STS trong 12\TEMPLATE\SiteTemplates thành YOUR_SITE_DEF_NAME
  • Sửa <Project Name=”YOUR_PROJECT_NAME” … >
  • Copy WebTemp.XML thành WebTemp_YOUR_NAME.XML
  • Với <Template> Sửa thuộc tính Name=”YOUR_SITE_DEF_NAME” như tên thư mục đặt trong SiteTemplates. Đặt ID của <Template> thành ID=”unique_number_greater_than_10000″(Số >10000, chưa được sử dụng)
  • Restart IIS: iisreset

    Xong rồi

Bài viết này còn vài điểm chưa rõ ràng. Tuy nhiên, khối lượng tài liệu của Sharepoint rất lớn, mình sẽ chỉnh sửa lại bài viết này khi mọi thứ được rõ ràng.

See you soonJ

Lỗi tạo File MDF khi bắt đầu với ASP.NET MVC

Sử dụng Windows 64bit nhiều khi cũng thật tai hại. Hôm nay mình đã cảm nhận được một phần. Nhờ trời đó không phải là một Issue quá nghiêm trọng trong hàng ngàn Issue chưa có câu trả lời của .NET. ^__^

Let me report the problem, hope you will get some useful experience.

Mình đã quyết định tuyên chiến với em .NET, cụ thể là ASP.NET. Vì thế, việc đụng độ với MVC là việc không sớm thì muộn. Đã 2 ngày dùi mài, tích lũy được một số vốn kha khá, bắt tay vào thực hành. Đầu tiên là cái DDD. Tạo file SQL Database cái để thực hành Linq to SQL cái nào.

Upxxx

“Connections to SQL Server files (*.mdf) require SQL Server Express 2005 to function proprely. Please verify the installation of the component or download from the URL…”

Vui quá. L vẫn chưa làm được(12.41)

Search được một tut trên StackOverflow.com. Không hiệu quả, hic

Cuối cùng thì cũng đã thành công.

Giải pháp ư?

Bước 1: Nâng cấp VS lên thành bản SP1.

Bước 2: Vào menu Tools-> Option-> Database Tools -> Data Connection-> Database Instant Name -> Chỉnh lại SQLEXPRESS nếu nó có giá trị khác.

OK. Chạy lại thử xem.

Again: Hope it useful & Be happy to share

Sử dụng UNION

SQL cơ bản thì có thể ai cũng từng đọc qua. Nhưng khi vào làm việc với nó thực tế thì mới gặp nhiều vấn đề và thu được nhiều kinh nghiệm.

Hôm nay mình gặp lỗi thế này:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

Lỗi này có nghĩa là khi Order by trong lệnh SEELCT có UNION thì phải select cả trường đem ra ORDER BY.

ví dụ muốn order by date thì bạn phải select cả date.

SELECT id, title from table1 order by date union SELECT id, title from table2 order by date ==> câu lênh này sẽ báo lỗi

SELECT id, title,date from table1 order by date union SELECT id, title,date from table2 order by date => câu lệnh này sẽ chạy tốt

Tạo website đa ngôn ngữ trong ASP.NET

Một site đa ngôn ngữ sẽ là không thể thiếu trong tương lai cho mọi tổ chức có quy mô hoạt động toàn cầu, hoặc đơn giản chỉ là một site tin tức.
Sau một thời gian ngâm cứu về Multiple-language ASP.net Website, Mình đã rút ra được một số kết luận như sau:
– Với một site đa ngôn ngữ, cần phải có một cấu trúc rõ ràng. Nếu bạn dùng Masterpage thì không thể quy định CultureInfo trong MasterPage được. Cơ bản vẫn phải là quy định từng file aspx. Đó là cái củ chuối. Vậy thì làm thế nào? Cách tốt nhất là create một basePage extends từ System.Web.UI.Page. Trong lớp này, bạn tạo một hàm override như sau:

protected override void InitializeCulture()
{
if (!string.IsNullOrEmpty(Request[“lang”]))
{
Session[“lang”] = Request[“lang”];
}
string lang = Convert.ToString(Session[“lang”]);
string culture = string.Empty ;
if (lang.ToLower().CompareTo(“vi”) == 0 || string.IsNullOrEmpty(culture))
{
culture = “vi-VN”;
}
if (lang.ToLower().CompareTo(“en”) == 0)
{
culture = “en-US”;

}
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

base.InitializeCulture();

Chú ý có 2 dòng khỏi tạo Culture khác nhau: CultureInfo.CreateSpecificCulture(culture); / new CultureInfo(culture); Tuy nhiên, mục đích của chúng là giống nhau và chỉ cần dùng 1 trong 2 hàm đó là được.

Các Page sau này bạn tạo ra, thay vì extend System.WEb.UI.Page thì bạn chỉ cần xtends cái BasePage của mình mà thôi. Làm như vậy không chỉ giúp tiết kiệm vì chỉ cần Set Culture một lần mà còn có thể tạo nhiều tùy chọn chung từ lớp cha đó nữa.

Sau khi tạo xong các file *.resx hý hửng test thì nhận được bug sau:


Could not find any resources appropriate for the specified culture or the neutral culture. Make sure “xxxxxxxxxxxxxx” was correctly embedded or linked into assembly “xxxxxxxxxx” at compile time, or that all the satellite assemblies required are loadable and fully signed.

Để giải quyết vấn đề này, vào properties của file .resx, chọn Build Action là Embedded Resource. Compile lại là OK.

Tiếp tục nha.

Cập nhật trường thời gian trong MSSQL trong Website đa ngôn ngữ

Khi làm việc với site đa ngôn ngữ trong ASP.NET, thường chúng ta phải đặt CultureInfo ứng với các ngôn ngữ. Site đa ngôn ngữ là yêu cầu thường hay gặp, tuy nhiên, khi làm việc với nó sẽ gặp rất nhiều vấn đề phiền toái đi kèm. Đặc biệt là các định dạng ngày tháng, thời gian. Một cậu lệnh update cơ sở dữ liệu đang chạy ngon lành với ngôn ngữ là en-US, bạn chuyển qua vi-VN, Exception bắn ra ùn ùn. Đó là do các định dạng trường thời gian của MSSQL khác với lại format thời gian trong tiếng việt, Làm cách nào đây?

Giải pháp đây:

Bạn phải đặt cho trường thời gian một format cố định. Thay vì viết câu lệnh

“UPDATE xbml_table set time=”+DateTime.Now..toString(“d”)…

Bây giờ DateTime.Now của chúng ta sẽ cần một bước xử lý đơn giản:

DateTime dt = DateTime.Now;

CultureInfo ci = New CultureInfo(“en-US”);

“UPDATE abx_xzy_tbl SET ” + dt.toString(“d”,ci);

Ok, Giải quyết xong rồi. Làm việc tiếp thôi.

Tham khảo:

http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

Culture