Использование оператора SQL SELECT ... WHERE LIKE в TSQL дает записи NaN в datatable с использованием SqlDataReader, почему? - PullRequest
0 голосов
/ 05 июня 2018

Я использую базу данных tsql с запущенной мной программой на C #.Я использую следующий оператор:

"SELECT Frequency, Level FROM dbo.myDB WHERE Frequency = 'some string'"

, а затем считываю его в DataTable с использованием средства чтения данных SQL следующим образом:

dt = new DataTable();
using(con)
{
   using(SqlCommand cmdCOunt = new SqlCommand(stmt,con))
    {
        using(sqlDataReader dr = cmdCount.ExecuteReader())
        {
           dt.Load(dr);
        }
    }
 }

однако при этом столбец 'Level'заполнено 'NaN'.

Оба столбца данных имеют текстовый тип, хотя столбец уровня содержит записи в виде отрицательных чисел.Интересно, может быть, это является причиной проблемы, однако я не могу найти ответ, как ее решить.

Определение таблицы:

CREATE TABLE [dbo].[RawCal] (
   [Id]   INT   IDENTITY (1,1) NOT NULL,
   [Frequency] TEXT NULL,
   [MeasLevel] TEXT NULL,
   PRIMARY KEY CLUSTERED ([Id] ASC)
  );

Спасибо, если вы можете предложить какую-либо информацию.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я подозреваю, что ваша проблема тип данных text .

ВАЖНО!Типы данных ntext, text и image будут удалены в следующей версии SQL Server.Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время.Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

Измените на nvarchar(max) или varchar(max).

Попробуйте простой rdr

SqlCommand cmd = new SqlCommand();
using (SqlDataReader rdr = cmdCount.ExecuteReader())
{
    while (rdr.Read())
    {
        string text1 = rdr.GetString(0);
        string text2 = rdr.GetString(1);
    }
}
0 голосов
/ 05 июня 2018

Если ваше значение равно 'some string', вы можете использовать =

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency = 'some string'

Если вы хотите частичное совпадение, используйте подстановочный знак %, ниже приведены результаты, где Frequency начинается с some string:

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE 'some string%'

Или где содержит some string:

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE '%some string%'

NaN

Еще одна вещь, которую нужно проверить, - может ли поле Level на самом деле содержать нечисловые значения.

Столбец «Уровень» заполняется значением «NaN».

Звучит так, как будто у него есть что-то, что не является числом, поэтому NaN: не число.

Возможно, у вас есть значение, которое выходит за границы типа - поэтому оно может выглядеть как числоно быть слишком большим.

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