Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用TSQL";选择。。。“我喜欢什么地方?”;语句使用SqlDataReader在datatable中提供NaN项,为什么?_C#_Sql_Database_Winforms_Tsql - Fatal编程技术网

C# 使用TSQL";选择。。。“我喜欢什么地方?”;语句使用SqlDataReader在datatable中提供NaN项,为什么?

C# 使用TSQL";选择。。。“我喜欢什么地方?”;语句使用SqlDataReader在datatable中提供NaN项,为什么?,c#,sql,database,winforms,tsql,C#,Sql,Database,Winforms,Tsql,我正在使用一个tsql数据库和一个正在运行的C#程序。我使用以下语句: "SELECT Frequency, Level FROM dbo.myDB WHERE Frequency = 'some string'" 然后使用SQL datareader将其读入DataTable,如下所示: dt = new DataTable(); using(con) { using(SqlCommand cmdCOunt = new SqlCommand(stmt,con)) {

我正在使用一个tsql数据库和一个正在运行的C#程序。我使用以下语句:

"SELECT Frequency, Level FROM dbo.myDB WHERE Frequency = 'some string'"
然后使用SQL datareader将其读入DataTable,如下所示:

dt = new DataTable();
using(con)
{
   using(SqlCommand cmdCOunt = new SqlCommand(stmt,con))
    {
        using(sqlDataReader dr = cmdCount.ExecuteReader())
        {
           dt.Load(dr);
        }
    }
 }
但是,通过这样做,“级别”列将填充“NaN”

数据列均为文本类型,但级别列的条目形式为负数。我想知道这是否是问题的根源,但我找不到解决问题的答案

表定义:

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

如果您能提供任何见解,谢谢您。

如果您的值正好是
“某个字符串”
您可以使用
=

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency = 'some string'
如果要进行部分匹配,请使用
%
通配符,下面将查找
频率
某些字符串开始的结果:

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE 'some string%'
SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE '%some string%'
或者它包含
某些字符串的位置

SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE 'some string%'
SELECT Frequency, Level FROM dbo.myDB WHERE Frequency LIKE '%some string%'
楠 要检查的另一件事是
级别
字段实际上是否可能包含非数值

“级别”列正在填充“NaN”

这听起来好像它有一些不是数字的东西,因此
NaN
:不是数字

可能您的值溢出了类型的边界-因此它可能看起来像一个数字,但太大了。

我怀疑您的问题是

重要!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);
    }
}

您是否已将%包含在您喜欢的项目中<代码>其中的频率如“%some string%”
@aurete no我还没有包括%这很重要吗?正在正确填充频率列…请发布表定义和示例中的一些示例数据频率='some string'是合适的。所以只要改变它,这样答案就不会偏离主题。”狗仔队doneThanks回答。级别字段只包含数字(负小数),但是它们是文本类型,所以我不明白为什么它甚至应该将它们视为数字?另外,由于类型不兼容,我不能使用Frequency='some string',因为正在计算的东西差不多就是这样,我不知道还有什么额外的代码会有用。我已经更改为varchar(50)了,问题是持久性的。我不知道什么是rdr?它是SqlDataReader