以下编码执行但该值未在屏幕上打印
protected void Button1_Click(object sender, EventArgs e)
{
if (CheckBox1.Checked)
{
string OIMSquery = "SELECT COUNT(name) AS PolicySold FROM TestDate WHERE name='divi'";
SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
OIMS_01.Open();
OIMScmd.ExecuteNonQuery();
OIMS_01.Close();
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
使用ExecuteScalar()
获取单个值
string OIMSquery = "SELECT COUNT(name) AS PolicySold FROM TestDate WHERE name='divi'";
SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
OIMS_01.Open();
int _result = Convert.ToInt32(OIMScmd.ExecuteScalar());
OIMS_01.Close();
答案 2 :(得分:1)
你有一个查询。因此这个电话不合适:
OIMScmd.ExecuteNonQuery();
相反,您应该使用ExecuteScalar()
:
int count = (int) OIMScmd.ExecuteScalar();
(它可能会返回long
而不是int
- 我不能随意回复。)
此外,您应该为using
使用SqlCommand
语句,并为每个操作创建一个新连接:
using (var connection = new SqlConnection(...))
{
connection.Open();
using (var command = new SqlCommand(query, connection))
{
int count = (int) command.ExecuteScalar();
// Now use the count
}
}
还不清楚这是什么类型的应用程序 - 如果它在本地GUI(WinForms或WPF)中,您应该不在UI线程上执行数据库访问。在数据库访问发生时,UI将被冻结。 (如果这是在Web应用程序中,则每次创建新的数据库连接更为重要......您不希望两个单独的请求同时尝试使用相同的连接。)
答案 3 :(得分:0)
使用SqlCommand.ExecuteScalar()
代替ExecuteNonQuery()
,而不返回任何内容。
答案 4 :(得分:0)
您需要使用:ExecuteScalar()
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
int result = Convert.ToInt32(OIMScmd.ExecuteScalar());
而不是
OIMScmd.ExecuteNonQuery();
答案 5 :(得分:0)
您可以使用SqlCommand.ExecuteScalar
方法;
执行查询,并返回第一行的第一列 查询返回的结果集。其他列或行是 忽略。
int i = (int)OIMScmd.ExecuteScalar();
由于此方法返回object
,因此您应该将其转换为int
。
using (SqlConnection OIMS_01 = new SqlConnection(connString))
{
SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
try
{
OIMS_01.Open();
int i = (int)OIMScmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
答案 6 :(得分:0)
尝试,OIMScmd.ExecuteReader();
方法返回SqlDataReader
类的对象,然后从中读取值。
OR
使用,Convert.ToInt32(OIMScmd.ExecuteScalar())
,然后打印该值。