我有以下资料:

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 documentationExecuteScalar
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
现在,作为最后一点建议,请用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/

10-10 23:02