以下代码不起作用。此表中只有一行。我如何得到sql将返回的语句?:
SqlConnection conn = new SqlConnection(connectionStringArg);
SqlCommand command = new SqlCommand("select applicationname from tbl_settings");
command.Connection = conn;
conn.Open();
string simpleValue = command.ExecuteReader()[0].ToString();
conn.Close();
return simpleValue;
对于如何实现这个相对简单的任务,任何帮助都会很棒。
答案 0 :(得分:16)
由于只返回了一个值,您可以这样做:
string value = (string)command.ExecuteScalar();
如果您需要的内容超过返回的第一行中的第一列,则需要使用ExecuteReader()。见driis' answer
答案 1 :(得分:6)
无法将DataReader编入索引。你需要这样的东西:
using(conn)
using(var reader = command.ExecuteReader())
{
reader.Read();
string simpleValue = reader.GetString(0);
}
一般的想法是为每个记录推进阅读器(使用Read
),然后您可以从行中读取值。正如另一个答案中所指出的,如果您知道结果集中只有一个值,command.ExecuteScalar()
就可以为您提供。
答案 2 :(得分:5)
您必须在从ExecuteReader返回的DataReader上调用Read
方法才能到达第一行。像这样:
SqlDataReader rdr = command.ExecuteReader();
if (rdr.Read())
...
答案 3 :(得分:1)
你会做,例如
using(SqlConnection conn = new SqlConnection(connectionStringArg))
using(SqlCommand command = new SqlCommand("select applicationname from tbl_settings")) {
command.Connection = conn;
conn.Open();
SqlDataReader reader = command.ExecuteReader();
if(reader.read()) {
return reader.GetString(0);
}
return null;
}
答案 4 :(得分:1)
对于单个字符串,您希望使用ExecuteScalar获取单个值,然后尝试将其强制转换为字符串。 从doc:执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
例:
string result = command.ExecuteScalar() as string;
对于小东西,我经常发现LINQ2SQL最容易设置和使用。 This tutorial应该会在几分钟内启动并运行。对于较大的项目LINQ2SQL is considered obsolete,请参阅this question以获取讨论和替代方案。
答案 5 :(得分:0)
检查DataReader.Read()您需要调用它。
答案 6 :(得分:0)
string applicationname = "";
using(var reader = command.ExecuteReader())
{
reader.Read();
applicationname = reader.GetString(reader.GetOrdinal("applicationname"));
}
答案 7 :(得分:0)
var query_result = com.ExecuteScalar() as string;
if (!string.IsNullOrEmpty(query_result )) // do your thing here...