将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
的数据库中获取一些值?
您需要呼叫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
表示INSERT
、UPDATE
和DELETE
语句。也可以使用其他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);