AspNet开发问题三

标签: Asp 分类: Asp 创建时间:2019-01-22 00:30:46 更新时间:2023-10-20 11:23:25

基本的操作我这里就不介绍了,像如何在VS2017中新建ASP.NET MVC4,ASP.NET MVC5等,是新建Web Api还是新建空的网站,网上有大量教程,我这里主要介绍我接触的一下主要问题,以及关心的话题。

1.OrmLite连接数据库

为了使用ServiceStack.OrmLite连接Sqlite数据库,简直把我折腾坏了。本来就是从webservice的时代过来的,很久没玩Asp.net了,依然还是.net2.0。为了成功使用Ormlite,强烈建议将解决方案换成.net4.6(最新的),然后依次执行下面的安装:

1
2
3
PM>Install-Package ServiceStack
PM> Install-Package ServiceStack.OrmLite
PM> Install-Package ServiceStack.OrmLite.Sqlite

基本上就可以使用OrmLite连接sqlite数据库了,主要代码如下:

1
2
3
4
5
string sql = string.Format("select  `row`,`col`, `{0}`,  `{1}`,  `{2}`,  `{3}` from BXInfo where (col >= {4} AND col <={5}) and (row >= {6} and row <= {7})", pinfo1[0].Name,pinfo1[1].Name, pinfo2[0].Name, pinfo2[1].Name, col, col + 1, row, row + 1);
var dbfactory = new OrmLiteConnectionFactory(ConfigurationManager.AppSettings["DBPATH"].ToString(), SqliteDialect.Provider);
db = dbfactory.OpenDbConnection();

var infos = db.Select<BXInfo>(sql);

2.默认返回json格式数据

ASP.NET 默认返回的格式是Xml格式,有两种方式,需要找到Global.asax文件,在Application_Start()方法中添加一句:

1
2
// 使api返回为json 
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

3.修改路由不存在时的返回内容

自定义路由不存在时返回值,找到Global.asax文件,添加如下函数:

1
2
3
4
5
6
7
8
9
10
protected void Application_EndRequest()
{
var statusCode = Context.Response.StatusCode;
var routingData = Context.Request.RequestContext.RouteData;
if (statusCode == 404 || statusCode == 500)
{
Response.Clear();
Response.Write("路径不存在");
}
}

4.引用不了App_Code中的类:

5.指定的转换无效

从数据库查出数据,进行对象转换的时候,出现了这个问题。其实就是数据类型不正确,但是因为这个类包含了很多的属性,我一时也不知道到底哪个字段从数据库读出来然后转换到属性上去有问题。

【解决方法】
根据测试和数据类型转换说明,我的程序里面主要有两个地方不合适:

  • 1.数据库类型为 decimal 类型,C# 中应为 decimal 类型
  • 2.数据库类型为 smallint 类型,C# 中应为 Int16 类型

还有一个让我感到疑惑的事情,就是有时候你数据库里面是int类型,必须显示的声明为Int32,这个我暂时不知道是不是我程序写的有问题。不同的sql语句查询出来的结果,在进行类型转换的时候会出现不一样的效果。

  • 3.数据库类型为 int 类型,C# 中应为 Int32 类型

  • 4.如果使用 as 语法,decimal 类型,应该使用 0.0 as filed,的形式映射 filed 字段

6.Linq语法

有时候会看到这样的写法,就是直接一个from语法开始的查询

1
2
3
4
var query = from user in dc.GetTable<Site>()
group user by user.Group into userGroups
orderby userGroups.Key
select userGroups;
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。