数据库组件 Hxj.Data(七) (sql篇)
上一节讲述的是删除操作,本节将讲述如何直接执行sql语句。 直接执行sql语句是使用fromSql方法。 DbSession.Default.fromSql("select * from products").ToDataTable();
这样看起来亲切多了吧,直接sql就可以执行。
当然也可添加参数的啊。
DbSession.Default.fromSql("select * from products where productid=pid").AddInParameter("pid", DbType.Int32, 1).ToDataTable();
这样的查询条件是productid=1返回一条记录。
这里sql语句中pid要确保唯一,不然都会被替换成参数的。
比如:select * from products where productid=productid 这样在sqlserver下就会被替换成select * from products where @productid=@productid
这里只是做了简单的替换,所以确保申明的参数唯一性。
当多个参数时可如下写法:
DbParameter[] parameters = new DbParameter[2];
parameters[0] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[0].DbType = DbType.Int32;
parameters[0].ParameterName = "pid";
parameters[0].Value = 1;
parameters[1] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[1].DbType = DbType.Int32;
parameters[1].ParameterName = "cid";
parameters[1].Value = 2;
DbSession.Default.fromSql("select * from products where productid=pid or categoryid=cid")
.AddParameter(parameters)
.ToDataTable();
这样写似乎太麻烦了,更简洁的写法如下:
DbSession.Default.fromSql("select * from products where productid=pid or categoryid=cid")
.AddInParameter("pid", DbType.Int32, 1)
.AddInParameter("cid", DbType.Int32, 2)
.ToDataTable();
这样就清爽多了。
返回类型还可以如下:
IDataReader ToDataReader()
返回DataReader
DataSet ToDataSet()
返回DataSet
int ExecuteNonQuery()
返回受影响的条数
object ToScalar()
返回单个值
TResult ToScalar<TResult>()
返回执行类型的值
也可返回实体。
TEntity ToFirst<TEntity>()
返回第一条
相关文档:
实例1:只返回单一记录集的存储过程。
银行存款表(bankMoney)的内容如下
Id
userID
Sex
Money
001
Zhangsan
男
30
002
Wangwu
男
50
003
Zhangsan
男
40
要求1:查询表bankMoney的内容的存储过程
create procedure sp_query_bankMoney
as
select * from bankMoney
go
exec sp_query_bankMoney
注 ......
使用SQL SERVER2005的时候遇到了中文字符为乱码的情况,经过研究发现,设置SQL的排序规则可以解决这个问题。
1、登录服务器打开Microsoft SQL Server Management Studio。
2、在要修改的数据库上单击鼠标右键,并选择“属性”。
3、在弹出的数据库属性窗口中点击“选择页”中的“选项”。 ......
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
productversion:产品版本(例如,10.0.1600.22)
productlevel:产品级别(例如,RTM)
edition:版本(例如, Enterprise(企业版)、Developer Edition(开发版))
SELECT @@VERSION
微软具体说明:
......
在性能上,mysql是相当出色的,桌面格式myisam数据库与磁盘非常地兼容而不占用过多的cpu和内存,mysql内部很多时候都使用64位整数处理。yahoo就使用mysql后台数据库。
但mysql缺少一些附加功能,没有SqlServer全面。
sqlserver稳定型强,但必须增加额外复杂操作,磁盘存储,内存损耗等,对硬件软件要求都很高。
这两个数 ......
在SQL跨表组合查询存在效率问题,举例比如
delete from media_source where movie_id in ( select media_id from media where type=2 ) and origin = 3;
和
delete from media_source where origin = 3 and movie_id in ( select media_id from media where type=2 );
的效率是不一样的。
若origin=3的情况下media_so ......