例如,如果我能做到以下几点就好了:
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。
我在这里错过了什么?如何将我的数据库连接 session 设置为与我的线程使用的相同(默认情况下与 Windows 相同)?
最佳答案
我认为您必须手动分配每个属性。 应该是这样的。
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
)是只读的,这些值来自注册表或环境变量,并在打开连接时设置。
因此,首选方法是使用注册表或环境变量,这样就不必设置OracleGlobalization
。
关于c# - 如何将 Oracle session 的全局化设置为与 .NET 中的 Windows 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388534/