2012-09-22 87 views
3

一个整数值,我有一个SQL查询,如下所示:返回从SQL Server

SqlConnection conn = new SqlConnection(connectionString); 

conn.Open(); 

SqlCommand cmd = new SqlCommand("SELECT id FROM Pages WHERE pageName=about",conn); 
//cmd.Parameters.Add("@pageName","hakkinda"); 

SqlDataReader reader = cmd.ExecuteReader(); 

flID = reader.GetInt16(0); 

reader.Close(); 
conn.Close(); 

我得到一个错误信息:

Invalid attempt to read when no data is present.

有什么不对?

回答

3

我注意到一对夫妇潜在问题:

你需要调用reader.Read(),试图读取前来自它的数据。当人们期望多行时,这通常在循环中完成。

while (reader.Read()) { 
    flID = reader.GetInt16(0); 
} 

也是在你的SQL如果“约”是指是文字,而不是另一列名,你可能需要它周围的单引号:

"SELECT id FROM Pages WHERE pageName='about'" 
0

您的查询返回0个结果。这是因为SQL字符串中的参数值缺少引号。它应如下所示(请注意“约”字周围的单引号):

SqlCommand cmd = new SqlCommand("SELECT id FROM Pages WHERE pageName='about'",conn); 
0

你必须调用DataReader.Read获取结果:

SqlDataReader reader = cmd.ExecuteReader(); 
reader.Read(); 

DataReader.Read返回一个布尔值,所以如果你有超过1分的结果,你可以这样做:

while (reader.Read()) { 
    // read data here 
} 

你的SELECT语句应该是:

"SELECT id FROM Pages WHERE pageName='about'" 
0

如果您希望仅返回一个值,你可以使用.ExecuteScalar()

flID = int.Parse(query.ExecuteScalar().ToString()); 

此外,使用单引号为pageName值。

SqlCommand cmd = new SqlCommand("SELECT id FROM Pages WHERE pageName='about';",conn);