例如,如果我能做到以下几点就会很棒:
private void SetSessionGlobalization(Oracle.DataAccess.Client.OracleConnection aConnection)
{
System.Globalization.CultureInfo lCultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
aConnection.SetSessionInfo(lCultureInfo);
}
但这不起作用,因为SetSessionInfo将OracleGlobalization类作为参数,而不是CultureInfo!
这也不起作用:
private void SetSessionGlobalization(Oracle.DataAccess.Client.OracleConnection aConnection)
{
Oracle.DataAccess.Client.OracleGlobalization lClientGlobalization = Oracle.DataAccess.Client.OracleGlobalization.GetClientInfo());
aConnection.SetSessionInfo(lClientGlobalization);
}
因为GetClientInfo获得了客户全球化设置的Oracle版本,而不是Windows。
我在这里缺少什么?如何将我的数据库连接会话设置为与我的线程使用的相同(默认情况下与Windows相同)?
答案 0 :(得分:1)
我认为您必须手动分配每个属性。 就像这样。
private void SetSessionGlobalization(Oracle.DataAccess.Client.OracleConnection aConnection)
{
OracleGlobalization info = aConnection.GetSessionInfo();
System.Globalization.CultureInfo lCultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
var ri = new System.Globalization.RegionInfo(lCultureInfo.LCID);
info.Calendar = lCultureInfo.Calendar.GetType().Name.Replace("Calendar", String.Empty);
info.Currency = ri.CurrencySymbol;
info.DualCurrency = ri.CurrencySymbol;
info.ISOCurrency = ri.ISOCurrencySymbol;
info.DateFormat = lCultureInfo.DateTimeFormat.ShortDatePattern + " " + lCultureInfo.DateTimeFormat.ShortTimePattern.Replace("HH", "HH24").Replace("mm", "mi");
info.DateLanguage = System.Text.RegularExpressions.Regex.Replace(lCultureInfo.EnglishName , @" \(.+\)",String.Empty);
info.NumericCharacters = lCultureInfo.NumberFormat.NumberDecimalSeparator + lCultureInfo.NumberFormat.NumberGroupSeparator;
info.TimeZone = String.Format("{0}:{1}", TimeZoneInfo.Local.BaseUtcOffset.Hours, TimeZoneInfo.Local.BaseUtcOffset.Minutes);
info.Language = ...
info.Territory = ...
info.TimeStampFormat = ...
info.TimeStampTZFormat = ...
try {
aConnection.SetSessionInfo(info);
} catch ( OracleException err ) {
MessageBox.Show(err.Message);
}
}
您必须使用多种翻译,例如:用于日期格式或区域/语言。我希望你知道该怎么做。
注意一些(重要的)设置(例如ClientCharacterSet
)是Read / only,这些值是从Registry或Environment变量派生的,并在打开连接时设置。
因此,首选方法是使用Registry或Environment变量,然后您不必设置OracleGlobalization
。