我正在尝试将数据库中的信息保存为字符串。
如何通过以下代码实现这一目标?
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
中保存的数据库中获取某些值?
答案 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
适用于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));
}
}
}
}
答案 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);