将sql返回保存为字符串

本文关键字:字符串 保存 返回 sql | 更新日期: 2023-09-27 17:53:58

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

下面的代码是怎么做到的?

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的数据库中获取一些值?

将sql返回保存为字符串

您需要呼叫cmd.ExecuteScalar()而不是cmd.ExecuteNonQuery()

请参阅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());

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));
            }
        }
    }
}

您需要使用SqlDataAdapter填充SqlDatareader或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> 中获得结果(因为你正在从表中请求单列,并且可能有多行)你可以这样做:

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);