Структура сущности C # Запрашивает ошибку хранимой процедуры "Культура не поддерживается" - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь запросить данные из базы данных, которая содержит некоторый корейский текст. То же самое работает с другими БД, которые не имеют никакой корейской информации. Должен ли я установить некоторую информацию о культуре? Найденная мной сортировка БД: 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);

1 Ответ

0 голосов
/ 13 ноября 2018

Здесь отображается LCID для установки в анализаторе TDS - в частности TdsParser.TryProcessEnvChange; это означает, что вы ничего не можете сделать в своем коде C # , чтобы что-то изменить.

Я могу предложить только два предложения:

  1. попробуйте установить соответствующий корейский языковой пакет на компьютер, с которого вы запрашиваете; может быть, прямо сейчас не удается разрешить культуру, но установка языкового пакета в Windows помогает понять - не проверено
  2. посмотрите, можете ли вы изменить параметры сортировки базы данных; теперь очевидно, что это огромное изменение, которое имеет огромное влияние, поэтому не должно быть легким - и в идеале только после того, как все другие подходы потерпели неудачу

Третий вариант, конечно, может заключаться в том, чтобы выяснить, реагируют ли пользователи EF или SqlClient (перекрывающиеся команды) на github; они находятся под dotnet / corefx. Однако общедоступный github - это, в основном, «.NET Core», поэтому для начала лучше всего убедиться, что та же проблема возникает в .NET Core; если так, то с людьми будет намного легче общаться.

Отказ от ответственности: все здесь от взлома через дерево вызовов, и я не не претендую на то, чтобы быть авторитетным в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...