使用cmd.ExecuteScalar()方法:
decimal average = (decimal) cmd.ExecuteScalar();
cmd.ExecuteNonQuery();
只返回影响的行数,其中,你想要的是读取结果一套SELECT
声明。
我也从SELECT
声明中删除了USE [DB_SACC]
,因为您在连接字符串中定义了数据库名称。
编辑
您的代码应该是这样的:
string textt = "SELECT AVG (Total_Divida) FROM t_pagamentos";
cmd.CommandText = textt;
connection.Open();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
decimal average = (decimal) cmd.ExecuteScalar();
if (textt == null)
{
MessageBox.Show("nothing");
}
else
{
TextBox3.Text = average.ToString();
}
编辑2:
try
{
string textt = "SELECT AVG (Total_Divida) FROM t_pagamentos";
cmd.CommandText = textt;
connection.Open();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
decimal average = (decimal)cmd.ExecuteScalar();
TextBox3.Text = average.ToString();
}
catch(Exception ex)
{
// log your exception here...
MessageBox.Show("nothing");
}
编辑3:
在你最近的评论光试试这个
string connectionString = "Data Source=localhost; Initial Catalog=DB_SACC; User id=sa Password=1234;";
decimal? average;
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
string textt = "SELECT AVG (Total_Divida) AS 'AVG_DIVIDA' FROM t_pagamentos";
cmd.CommandText = textt;
connection.Open();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
using (DataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
average = decimal.parse(reader["AVG_DIVIDA"].ToString());
break;
}
}
}
}
TextBox3.Text = average.HasValue ? average.ToString() : "Unknown error occurred";
}
catch (Exception ex)
{
MessageBox.Show("Unable to retrieve the average, reason: " + ex.Message);
}
注:使用的DataReader从数据库是不优选得到的只是单一值。我提出这个建议是因为你在评论中提到的错误。
如果您正在获取任何SQL异常,请尝试在SQL Server上将此语句作为独立测试运行。
USE DB_SACC
GO
SELECT AVG (Total_Divida) AS 'AVG_DIVIDA' FROM t_pagamentos
GO
如果在执行T-SQL语句时仍然遇到任何错误,请将其作为另一个问题发布。
提示:你正在执行一个查询'cmd.ExecuteNonQuery()' –
http://stackoverflow.com/questions/5349114/executenonquery – mayk
使用'ExecuteScalar()'将其存储在某个对象中,然后访问它 –