And*_*ili 1 c# sql sql-server globalization cultureinfo
我是C#的新手,我对如何使用System.Globalization.CultureInfo类有以下疑问.
我有以下情况.
在类中,我读取了一些值(来自使用XPath的XML),其中包含一些信息作为某些数据字段.
所以我有类似的东西:
System.Globalization.CultureInfo cultureEN = new System.Globalization.CultureInfo("en-GB");
currentDeepSightVuln.LastUpdated = DateTime.Parse(n_alertdocument.SelectSingleNode("./x:LastUpdated", nsmgr).InnerText, cultureEN);
Run Code Online (Sandbox Code Playgroud)
在我的XML文件中,此字段为:
<x:LastUpdated>2014-05-21T17:00:38</x:LastUpdated>
Run Code Online (Sandbox Code Playgroud)
所以它的价值是2014-05-21T17:00:38
在执行上一个操作(初始化LastUpdate对象属性)时运行我的程序我有**LastUpdate属性值是:{21/05/2014 17:00:38}.
如您所见,它有另一种格式而不是XML字段值.我认为这很正常,因为它是基于en-GB设置进行转换的.
我的疑问是:如果那时我将我的对象保存在数据库表(Microsoft SQL Server)上,我可以遇到一些问题,还是从SQL Server中以纠正的形式重新转换?
编辑1: 要将我的对象插入db,我使用类似的东西:
public long insert(DataModel.Vulnerability.Vuln v){
_strSQL = "";
string strSQLParametri = "";
string query = "";
long newId;
long VulnerabilityAlertDocumentPkValue;
System.Data.Common.DbCommand command;
command = _connection.CreateCommand();
try
{
_transactionBegin();
// [VulnerabilityAlertId] insertion on the DB:
if (v.VulnerabilityAlertId != null)
{
_strSQL = "INSERT INTO VulnerabilityAlertDocument ( [VulnerabilityAlertId] ";
strSQLParametri = " VALUES (@VULNERABILITYALERTID ";
_addParameter(command, "@VULNERABILITYALERTID ", newId);
}
........................................................................
........................................................................
........................................................................
_strSQL += ",[PUBLISHED] ";
strSQLParametri += ", @PUBLISHED ";
_addParameter(command, "@PUBLISHED", v.Published);
........................................................................
........................................................................
........................................................................
query = _strSQL + " ) " + strSQLParametri + " );";
command.CommandText = query;
_executeNoQuery(command);
VulnerabilityAlertDocumentPkValue = _getIdentity();
Debug.WriteLine("PK della tabella VulnerabilityAlertDocumentPkValue: " + VulnerabilityAlertDocumentPkValue);
Run Code Online (Sandbox Code Playgroud)
TNX
这实际上不是关于文化,不是关于en-GB,而是关于SQL服务器; 更简单地说,xml定义了ISO 8601格式中指定的日期.这就结束了.
您不应该使用 xml DateTime.Parse
指定en-GB
.那是不对的.
正确的实施将是:
DateTime when = XmlConvert.ToDateTime(...);
Run Code Online (Sandbox Code Playgroud)
或者更方便,如果使用XElement
等:
DateTime when = (DateTime)el;
Run Code Online (Sandbox Code Playgroud)
如果你想在SQL服务器中讨论远离 xml的日期,那么简单地说:将它们视为date
或datetime
(而不是字符串) - 通过类型化列或作为类型化参数.然后,格式或区域设置永远不会混淆.
通过编辑,再次与xml无关.假设它v.Published
是a DateTime
,并且[PUBLISHED]
是a datetime
,那么它应该工作正常 - 这些值永远不是字符串.A DateTime
/ datetime
实际上是一个数字(在定义的时期中有一些定义的间隔).而且,由于它们永远不会是字符串,所以:文化和格式不会涉及到.
归档时间: |
|
查看次数: |
800 次 |
最近记录: |