如何从数据库中获取简单的字符串

时间:2011-02-10 18:03:27

标签: c# asp.net sql ado.net

以下代码不起作用。此表中只有一行。我如何得到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;

对于如何实现这个相对简单的任务,任何帮助都会很棒。

8 个答案:

答案 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...