Command对象
Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。Command主要有三个方法:
- ExecuteNonQuery
- ExecuteScalar
- ExecuteReader
ExecuteNonQuery
ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "INSERT INTO bz_users(name, password) VALUES('张三','123456')";
SqlCommand cmd = new SqlCommand(sql, conn);
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
Console.WriteLine("Insert ok");
}
}
Console.ReadKey();
ExecuteNonQuery Insert
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "INSERT INTO bz_users(name, password) VALUES(@Name,@Password)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@Name", "李四"));
cmd.Parameters.Add(new SqlParameter("@Password", "123"));
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
Console.WriteLine("Insert ok");
}
}
Console.ReadKey();
ExecuteNonQuery Delete
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "delete from bz_users where name=@Name";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@Name", "李四"));
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
Console.WriteLine("Delete ok");
}
}
Console.ReadKey();
ExecuteNonQuery Update
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "update bz_users set password=@Password where name=@Name";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@Name", "张三"));
cmd.Parameters.Add(new SqlParameter("@Password", "123"));
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
Console.WriteLine("Update ok");
}
}
Console.ReadKey();
ExecuteScalar
ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。
executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum)。
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "select count(*) from bz_users";
SqlCommand cmd = new SqlCommand(sql, conn);
int ret = int.Parse(cmd.ExecuteScalar().ToString());
Console.WriteLine(ret);
}
Console.ReadKey();
ExecuteReader
ExecuteReader用于实现只进只读的高效数据查询。
ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。
string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString();
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
string sql = "select * from bz_users";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader sr = cmd.ExecuteReader();
while (sr.Read())
{
Console.WriteLine(sr["name"] + " " + sr["password"]);
}
sr.Close();
}
Console.ReadKey();