保存sql返回一个字符串

时间:2014-03-27 15:39:38

标签: c# sql .net sql-server ado.net

我正在尝试将数据库中的信息保存为字符串。

如何通过以下代码实现这一目标?

using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    SqlCommand cmd = new SqlCommand("SELECT something FROM table");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    connection.Open();
    cmd.ExecuteNonQuery();
    connection.Close();
}

是否可以使用它来从string中保存的数据库中获取某些值?

3 个答案:

答案 0 :(得分:10)

而不是cmd.ExecuteNonQuery(),您需要致电cmd.ExecuteScalar()

有关文档,请参阅MSDN

string result = (string)cmd.ExecuteScalar();

正如@ThorstenDittmar正确指出的那样,只有当数据库中的值实际上是string(或者可以映射到它的东西,如varchar)时,才能使用强制转换。

您可以使用以确保:

object result = cmd.ExecuteScalar();

string s = result != null? result.ToString() : null;

或者

string s = Convert.ToString(cmd.ExecuteScalar());

答案 1 :(得分:2)

ExecuteNonQuery适用于INSERTUPDATEDELETE语句。还可以使用其他SQL命令,如DDL命令或db管理命令,其中不返回结果集或者可以丢弃结果。

ExecuteScalar可用于SELECT语句,其中只需要第一行的第一个字段。

如果必须返回更多字段和/或更多行,请使用ExecuteReader

使用ExecuteReader

的示例
using (var conn = new SqlConnection(connectionString)) {
    using (var cmd = new SqlCommand("SELECT name, loc FROM t WHERE id=@id", conn)) {
        cmd.Parameters.AddWithValue("@id", id);
        conn.Open();
        using (var reader = cmd.ExecuteReader())
        {
            int nameOrdinal = reader.GetOrdinal("name");
            int locationOrdinal = reader.GetOrdinal("loc");
            while (reader.Read()) {
                Console.WriteLine("Name = {0}, Location = {1}",
                    reader.GetString(nameOrdinal),
                    reader.GetString(locationOrdinal));
            }
        }
    }
}

答案 2 :(得分:1)

您需要使用SqlDatareader填充SqlDataAdapter或DataSet / DataTable中的记录。目前您使用的ExecuteNonQuery通常用于INSERT/UPDATE语句。

DataTable dt = new DataTable();
using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("SELECT something FROM table"))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Connection = connection;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
    }
}

这会从DataTable中的查询返回结果。

如果您希望将结果返回到List<string> (因为您从表中请求单个列,并且可能会有多行),您可以执行以下操作:< / p>

List<string> returnedList = new List<string>();
using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("SELECT something FROM table"))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Connection = connection;
        connection.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                returnedList.Add(Convert.ToString(reader["something"]));
            }
        }
    }
}

然后你可以做一个字符串:

string singleString = string.Join(Environment.NewLine, returnedList);