3

我有一个 SQL 查询如下:

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.

怎么了?

4

4 回答 4

3

我注意到几个潜在的问题:

在尝试从中读取数据之前,您需要调用 reader.Read()。当人们期望多行时,这通常在循环中完成。

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

如果“about”是文字而不是另一个列名,那么在您的 SQL 中,您可能需要在其周围加上单引号:

"SELECT id FROM Pages WHERE pageName='about'"
于 2012-09-22T19:52:32.480 回答
0

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

SqlCommand cmd = new SqlCommand("SELECT id FROM Pages WHERE pageName='about'",conn);
于 2012-09-22T19:51:53.520 回答
0

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

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

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

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

您的选择语句应该是:

"SELECT id FROM Pages WHERE pageName='about'"
于 2012-09-22T19:55:55.433 回答
0

如果您希望只返回单个值,则可以使用.ExecuteScalar()

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

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

SqlCommand cmd = new SqlCommand("SELECT id FROM Pages WHERE pageName='about';",conn);
于 2012-09-22T20:12:45.390 回答