我有以下资料:
String sql = "SELECT * FROM Temp WHERE Temp.collection = '" + Program.collection + "'";
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
Program.defaultCollection = (String)cmd.ExecuteScalar();
我想在执行语句之后得到第二列。我知道它只返回一行两列
我已经在网上看到,我将不得不阅读每一行的结果,有没有其他办法?
最佳答案
ExecuteScalar
从结果集的第一行获取第一列。如果你需要访问更多的内容,你需要采取不同的方法。这样地:
DataTable dt = new DataTable();
SqlDataAdapater sda = new SqlDataAdapter(sql, conn);
sda.Fill(dt);
Program.defaultCollection = dt.Rows[0]["defaultCollection"];
现在,我知道字段名可能不是
defaultCollection
,但您可以填写它。从MSDN documentation到
ExecuteScalar
:执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
现在,作为最后一点建议,请用
using
语句包装所有ado.net对象。这样地:using (SqlConnection conn = new SqlConnection(connString))
using (SqlDataAdapter sda = new SqlDataAdapter(sql, conn))
{
DataTable dt = new DataTable();
sda.Fill(dt);
// do something with `dt`
}
这将确保它们得到妥善处置。
关于c# - 从sql ExecuteScalar()检索值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18211964/