C# 使用TSQL";选择。。。“我喜欢什么地方?”;语句使用SqlDataReader在datatable中提供NaN项,为什么?
我正在使用一个tsql数据库和一个正在运行的C#程序。我使用以下语句: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)) {
"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