繁体   English   中英

C#实体框架查询存储过程错误“不支持文化”

[英]C# entity framework Querying stored procedure error “Culture is not supported”

我试图从包含一些韩国文字的数据库中查询数据。 其他没有朝鲜信息的数据库也可以使用。 我应该设置一些文化信息吗? 我发现的数据库排序规则是Korean_Wansung_Unicode_CI_AS

using (DBModel data = new DBModel())
{
  //command and parameters prepared here  
  var SqlCommand = "ProcedureName @LastUpdateDate, @LastUpdateTS";
   var SqlParams = new SqlParameter[]
   {
     new SqlParameter { ParameterName = "@LastUpdateDate",  Value =lastDatetime, Direction = System.Data.ParameterDirection.Input },
     new SqlParameter { ParameterName = "@LastUpdateTS",  Value =lastTS, Direction = System.Data.ParameterDirection.Input }
    };
  return data.Database.SqlQuery<BP>(SqlCommand, SqlParams).ToList();
}

Database.SqlQuery抛出CultureNotFoundException ,如下所示

不支持文化。

参数名称:文化

66578(0x10412)是无效的区域性标识符。

at System.Globalization.CultureInfo.GetCultureInfo(Int32 culture)
   at System.Globalization.CompareInfo.GetCompareInfo(Int32 culture)
   at System.Data.ProviderBase.FieldNameLookup.LinearIndexOf(String fieldName, CompareOptions compareOptions)
   at System.Data.ProviderBase.FieldNameLookup.IndexOf(String fieldName)
   at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
   at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
   at System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.TryGetColumnOrdinalFromReader(DbDataReader storeDataReader, String columnName, Int32& ordinal)
   at System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.CreateColumnMapFromReaderAndClrType(DbDataReader reader, Type type, MetadataWorkspace workspace)
   at System.Data.Entity.Core.Objects.ObjectContext.InternalTranslate[TElement](DbDataReader reader, String entitySetName, MergeOption mergeOption, Boolean streaming, EntitySet& entitySet, TypeUsage& edmType)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal[TElement](String commandText, String entitySetName, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass69`1.<ExecuteStoreQueryReliably>b__68()
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass69`1.<ExecuteStoreQueryReliably>b__67()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably[TElement](String commandText, String entitySetName, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQuery[TElement](String commandText, ExecutionOptions executionOptions, Object[] parameters)
   at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass14`1.<ExecuteSqlQuery>b__13()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

我尝试过使用普通的旧方法将数据检索到数据表中的方法,以某种方式起作用。 那么,在EF中需要设置什么?

            var SqlCommand = "exec ProcedureName '2018-11-11 16:30:00', 163000";                   

            string constring = System.Configuration.ConfigurationManager.ConnectionStrings["Connection"].ToString();
            SqlConnection con = new System.Data.SqlClient.SqlConnection(constring);
            SqlCommand cmd = new SqlCommand(SqlCommand, con);
            cmd.CommandType = System.Data.CommandType.Text;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);

这里的LCID 似乎是在TDS解析器中设置的-尤其是TdsParser.TryProcessEnvChange ; 这意味着您无法在C#代码中进行任何更改。

我只能提供两个建议:

  1. 尝试在要查询的计算机上安装相关的朝鲜语语言包; 可能是因为现在它无法解决该文化,但是将语言包安装到Windows可以帮助理解- 未经测试
  2. 看看是否可以更改数据库排序规则; 现在显然,这是一个具有巨大影响的巨大变化,因此不应轻描淡写-理想情况下,只有在所有其他方法都失败之后

当然,第三个选项可能是查看EF或SqlClient人员(重叠团队)是否在github上响应。 他们在dotnet / corefx下。 公开的github主要是“ .NET Core”,因此一个很好的起点是确认同样的问题在.NET Core上发生。 如果是这样,与人交往会容易得多。

免责声明:这里的所有内容都是从入侵整个调用树开始的,我对此不做任何权威声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM