2023年6月21日发(作者:)
Entity Framework中执⾏sql语句⼀、为什么要在EF中执⾏SQL语句使⽤EF操作数据库,可以避免写SQL语句,完成使⽤Linq实现,但为什么还要在EF中执⾏SQL语句呢。如果要写SQL语句,完全可以使⽤来操作数据库。这样说虽然没错,可是有些时候使⽤EF操作数据库还是有⼀些不⽅便的地⽅,例如:如果要修改某⼀条记录,按照EF的正常流程⾛,需要先把要修改的数据查询出来,然后在去修改,这样不仅⿇烦⽽且性能也低,这时直接使⽤EF执⾏SQL语句性能会提⾼很多。⽽使⽤EF执⾏SQL⼜⽐⽅便,特别是在执⾏查询语句的时候,EF会把查询到的数据⾃动保存到数据实体中,省去了使⽤DataReader的⿇烦。同时查询出来的数据还会进⾏跟踪,如果你修改了查询出的值,之后就可以很⽅便的使⽤.SaveChanges()直接更新到数据库了。在数据上下⽂DbContext中有⼀个Database的属性,Database属性中有两组⽅法:ExecuteSqlCommand()和SqlQuery()。这两个⽅法都可以⽤来执⾏SQL语句,但这两个⽅法也有不同点:ExecuteSqlCommand()是不返回结果的,只返回受影响的⾏数,所以ExecuteSqlCommand()更适合⽤来执⾏创建、插⼊、更新、删除操作(即执⾏给定的DDL/DML命令)。SqlQuery()则会返回查询到的结果,并将结果保存在数据实体中,所以SqlQuery()更适合执⾏查询操作。⼆、使⽤ExecuteSqlCommand()执⾏创建、插⼊、更新、删除语句ExecuteSqlCommand()的使⽤⽅法很简单,直接传⼊SQL语句就可以了,执⾏完成后会返回受影响的⾏数。在下⾯的例⼦中,entity是⼀个继承⾃DbContext的对象。1、执⾏创建语句// 执⾏创建语句string strCreateSQL = @"CREATE table test( id int primary key not null,name varchar(16),password varchar(20))"; // 注意:执⾏create语句受影响的⾏数是-1int result = eSqlCommand(strCreateSQL);if ((-1)){ ine("创建成功!");} 2、执⾏Insert语句// 执⾏Insert语句string strInsertSQL = @"INSERT INTO test SELECT 1,'⼩明','1234' UNION SELECT 2,'⼩王','1234' UNION SELECT 3,'⼩红','1234' ";int result = eSqlCommand(strInsertSQL);if (result > 0){ ine("插⼊成功");}3、执⾏Update语句// 执⾏Update语句string strUpdateSQL = @"UPDATE test SET password=@pwd1 WHERE id=@id1;UPDATE test SET password=@pwd2 WHERE id=@id2;"; SqlParameter[] para = { new SqlParameter("@pwd1","ceshi12we"), new SqlParameter("@id1",1), new SqlParameter("@pwd2","ceshi127890"), new SqlParameter("@id2",2), };int result = eSqlCommand(strUpdateSQL, para);if (result > 0){ ine("更新成功");}4、执⾏Delete语句// 执⾏删除语句string strDelSQL = "delete from test";int result = eSqlCommand(strDelSQL);if (result > 0){ ine("删除成功");}5、执⾏Drop语句string strDropSQL = "drop table test";int result = eSqlCommand(strDropSQL);if ((-1)){ ine("删除成功");}注意:执⾏DDL语句(create、alter、drop等)返回值是-1,DML(insert、update、delete)返回的是受影响的⾏数。三、使⽤SqlQuery()查询数据SqlQuery()是⽤来执⾏查询的。SqlQuery()使⽤前需要指定返回值的类型。返回值类型可以是定义的实体类型,或者基元类型。例如:查询⼀个⽤户的完整信息,返回类型就是⽤户实体类型;如果是统计有多少个⽤户,返回值就是int类型。注意:返回值的个数和名称必须和传⼊的类型中属性个数、名称相同,不如会报错。在下⾯的例⼦中User是根据数据库表⽣成的实体类型。string strSQL = "SELECT * FROM Users WHERE ID>=10 ORDER BY ID DESC";var info = ry
2023年6月21日发(作者:)
Entity Framework中执⾏sql语句⼀、为什么要在EF中执⾏SQL语句使⽤EF操作数据库,可以避免写SQL语句,完成使⽤Linq实现,但为什么还要在EF中执⾏SQL语句呢。如果要写SQL语句,完全可以使⽤来操作数据库。这样说虽然没错,可是有些时候使⽤EF操作数据库还是有⼀些不⽅便的地⽅,例如:如果要修改某⼀条记录,按照EF的正常流程⾛,需要先把要修改的数据查询出来,然后在去修改,这样不仅⿇烦⽽且性能也低,这时直接使⽤EF执⾏SQL语句性能会提⾼很多。⽽使⽤EF执⾏SQL⼜⽐⽅便,特别是在执⾏查询语句的时候,EF会把查询到的数据⾃动保存到数据实体中,省去了使⽤DataReader的⿇烦。同时查询出来的数据还会进⾏跟踪,如果你修改了查询出的值,之后就可以很⽅便的使⽤.SaveChanges()直接更新到数据库了。在数据上下⽂DbContext中有⼀个Database的属性,Database属性中有两组⽅法:ExecuteSqlCommand()和SqlQuery()。这两个⽅法都可以⽤来执⾏SQL语句,但这两个⽅法也有不同点:ExecuteSqlCommand()是不返回结果的,只返回受影响的⾏数,所以ExecuteSqlCommand()更适合⽤来执⾏创建、插⼊、更新、删除操作(即执⾏给定的DDL/DML命令)。SqlQuery()则会返回查询到的结果,并将结果保存在数据实体中,所以SqlQuery()更适合执⾏查询操作。⼆、使⽤ExecuteSqlCommand()执⾏创建、插⼊、更新、删除语句ExecuteSqlCommand()的使⽤⽅法很简单,直接传⼊SQL语句就可以了,执⾏完成后会返回受影响的⾏数。在下⾯的例⼦中,entity是⼀个继承⾃DbContext的对象。1、执⾏创建语句// 执⾏创建语句string strCreateSQL = @"CREATE table test( id int primary key not null,name varchar(16),password varchar(20))"; // 注意:执⾏create语句受影响的⾏数是-1int result = eSqlCommand(strCreateSQL);if ((-1)){ ine("创建成功!");} 2、执⾏Insert语句// 执⾏Insert语句string strInsertSQL = @"INSERT INTO test SELECT 1,'⼩明','1234' UNION SELECT 2,'⼩王','1234' UNION SELECT 3,'⼩红','1234' ";int result = eSqlCommand(strInsertSQL);if (result > 0){ ine("插⼊成功");}3、执⾏Update语句// 执⾏Update语句string strUpdateSQL = @"UPDATE test SET password=@pwd1 WHERE id=@id1;UPDATE test SET password=@pwd2 WHERE id=@id2;"; SqlParameter[] para = { new SqlParameter("@pwd1","ceshi12we"), new SqlParameter("@id1",1), new SqlParameter("@pwd2","ceshi127890"), new SqlParameter("@id2",2), };int result = eSqlCommand(strUpdateSQL, para);if (result > 0){ ine("更新成功");}4、执⾏Delete语句// 执⾏删除语句string strDelSQL = "delete from test";int result = eSqlCommand(strDelSQL);if (result > 0){ ine("删除成功");}5、执⾏Drop语句string strDropSQL = "drop table test";int result = eSqlCommand(strDropSQL);if ((-1)){ ine("删除成功");}注意:执⾏DDL语句(create、alter、drop等)返回值是-1,DML(insert、update、delete)返回的是受影响的⾏数。三、使⽤SqlQuery()查询数据SqlQuery()是⽤来执⾏查询的。SqlQuery()使⽤前需要指定返回值的类型。返回值类型可以是定义的实体类型,或者基元类型。例如:查询⼀个⽤户的完整信息,返回类型就是⽤户实体类型;如果是统计有多少个⽤户,返回值就是int类型。注意:返回值的个数和名称必须和传⼊的类型中属性个数、名称相同,不如会报错。在下⾯的例⼦中User是根据数据库表⽣成的实体类型。string strSQL = "SELECT * FROM Users WHERE ID>=10 ORDER BY ID DESC";var info = ry
发布评论