从sql ExecuteScalar()中检索值

hay*_*sam 2 c# sql database sql-server

我有以下内容:

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();
Run Code Online (Sandbox Code Playgroud)

我想在执行语句后得到第二列.我知道它只返回一行有两列

我在网上看过,我必须阅读结果的每一行,还有其他方法吗?

Mik*_*oud 8

ExecuteScalar从结果集的第一行获取第一列.如果您需要访问更多,您需要采取不同的方法.像这样:

DataTable dt = new DataTable();
SqlDataAdapater sda = new SqlDataAdapter(sql, conn);
sda.Fill(dt);

Program.defaultCollection = dt.Rows[0]["defaultCollection"];
Run Code Online (Sandbox Code Playgroud)

现在,我意识到字段名称可能不是defaultCollection,但你可以填写.

MSDN文档ExecuteScalar:

执行查询,并返回查询返回的结果集中第一行的第一列.其他列或行将被忽略.

现在,作为最后一点建议,请将所有ADO.NET对象包装在一个using语句中.像这样:

using (SqlConnection conn = new SqlConnection(connString))
using (SqlDataAdapter sda = new SqlDataAdapter(sql, conn))
{
   DataTable dt = new DataTable();
   sda.Fill(dt);

   // do something with `dt`
}
Run Code Online (Sandbox Code Playgroud)

这将确保他们妥善处置.