我正在尝试做一些我觉得在宏伟的计划中很简单的事情,但是我显然遗漏了一些东西。我所拥有的是一个名为“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();
建设性建议表示赞赏。谢谢
答案 0 :(得分:1)
如果您只想从查询中返回一个值,那么 ExecuteScalar 就是您应该使用的内容。 ExecuteReader更适合仅向前读取多个记录,因此对您的情况来说太过分了
在这里查看比较What is the difference between ExecuteScalar, ExecuteReader and ExecuteNonQuery?
答案 1 :(得分:0)
最佳做法,当您返回1行和1列数据时(使用您的查询执行),请使用ExecuteScalar。结果,请使用ExecuteScalar。
答案 2 :(得分:0)
确保您要添加的列的名称是purprice,并且它是数字类型。 还要确保它不包含NULL值。
答案 3 :(得分: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 "";
}
答案 4 :(得分:0)
我认为您的代码没问题,但您错过了:
SqlCeCommand cmd = new SqlCeCommand("select sum(purprice) from localcollection",myconn);
就是这样,希望它有效
答案 5 :(得分:0)
只需在SUM()之后添加AS,如下面的行:
从localcollection中选择总和(purprice)AS purprice
你很高兴。