1

我正在尝试做一些我觉得在宏伟的计划中很简单的事情,但是我显然错过了一些东西。我拥有的是一个名为“localcollection”的简单数据库。我想做的是总结名为“purprice”的列的美元金额,并将其设置为标签(label4)的文本。在过去的几天里,我一直在寻找代码变体,这些变体提出了实现这一目标的不同方法。我的大部分挖掘表明使用 ExecuteScalar 是我想要做的。我一直在摸索的代码如下。

SqlCeConnection myconn = new SqlCeConnection(Properties.Settings.Default.localbotdbConnectionString);
myconn.Open();

{
    string result = "select sum(purprice) from localcollection";
    SqlCeCommand showresult = new SqlCeCommand(result, myconn);

    label4.Text = showresult.ExecuteScalar().ToString();
    myconn.Close();
}

其他人建议使用 SqlCeReader。我对他们中的任何一个都是公正的,只要其中一个有效,而且我显然遗漏了一些东西(我自己的错)。我试图使工作的读者演绎是:

SqlCeCommand cmd = new SqlCeCommand("select sum(purprice) from localcollection");
SqlCeDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
    label4.Text = reader.GetString(0);
}
myconn.Close();

建设性的建议表示赞赏。谢谢

4

6 回答 6

2

如果您只想从查询中返回一个值,那么ExecuteScalar就是您应该使用的,. ExecuteReader 更适合多条记录的只进读取,因此对于您的情况来说它是矫枉过正的

看看这里进行比较ExecuteScalar、ExecuteReader 和 ExecuteNonQuery 有什么区别?

于 2013-07-24T13:12:57.300 回答
0

最佳实践,当您返回 1 行和 1 列数据时使用 ExecuteScalar(您的查询会这样做)。因此,请使用 ExecuteScalar。

于 2013-07-24T13:11:59.810 回答
0

确保您尝试添加的列的名称是 purprice,并且它是数字类型。还要确保它不包含 NULL 值。

于 2013-07-24T13:21:12.063 回答
0

我会对你的代码做一些修改,因为一方面你没有正确处理你的对象,你还说你在按钮单击方法中有它,我会从那里得到它并使它成为它自己的功能。

private string performSQL() 
{
   string result = "select sum(purprice) from localcollection";
   using (SqlCeConnection myconn = new SqlCeConnection("ConnectionString"))
   using (SqlCeCommand showresult = new SqlCeCommand(result, myconn))
   {
      try
      {
          myconn.Open();
          return showresult.ExecuteScalar().ToString();

      }catch(System.Exception ex)
      {
          MessageBox.Show(ex.ToString());
          // or log exception how ever you prefer
      }finally
      {
          //the finally ensures your connection gets closed
          myconn.Close();
      }
   }
   return "";
}
于 2013-07-24T13:31:17.540 回答
0

我认为您的代码还可以,但是您错过了:

  SqlCeCommand cmd = new SqlCeCommand("select sum(purprice) from localcollection",myconn);

就是这样,希望它有效

于 2013-07-24T14:19:08.993 回答
0

只需在 SUM() 之后添加 AS,如下行:

从 localcollection 中选择 sum(purprice) AS purprice

你很高兴。

于 2014-08-12T18:34:07.253 回答