C#之在.aspx.cs代码中对数据库的操作


一、创建 DataClasses1.dbml 文件

在这里插入图片描述
在这里插入图片描述

表的各种东西拖进来就自动生成了,比如这个外键关系。
在这里插入图片描述
在这里插入图片描述
现在就可以使用DataClasses1DataContext dc = new DataClasses1DataContext();了。

让我们看看里面的内容:
.layout.designer.cs都是自动生成的文件:

  • .layout:布局文件,don’t care.
  • .designer.cs:是到时候怎么使用表对应的代码,和数据库基本一致。
    在这里插入图片描述
    看到这个@operator,分明数据库的表名是operator,之所以自动生成这个样子,是因为operator是一个关键字,VS就自动加了个符号使其不同。

二、LINQ增

// 表的一行数据实体
invoice tr = new invoice();

// 使用DataClasses
DataClasses1DataContext dc = new DataClasses1DataContext();
tr.invoiceid = this.L1.Text;
// ...
dc.invoice.InsertOnSubmit(tr);
dc.SubmitChanges();

三、LINQ查询

1.简写

var user = dc.operator.Where(p => p.operatorid == Convert.ToInt32(this.txtID.Text.Trim())).FirstOrDefault();

2.详写

选择某个属性

var a = from p in dc.operator
        where (p.operatorid == Convert.ToInt32(this.txtID.Text.Trim()))
        select p.phone;

string phone = a.First();

选择多个属性:

a是包含多个{int,int,int,int}对象的集合,i是每个{int,int,int,int}对象,获取里面的值就是i.xxxxxx就是p.xxx

// 数量
var a = from p in dc.order
		where (p.date >= dateTimeBegin && p.date <= dateTimeEnd && p.shopid == value)
		select new { p.water1number, p.water2number, p.water3number, p.water4number };

int[] wn = { 0, 0, 0, 0 };

foreach (var i in a)
{
	wn[0] += i.water1number;
	wn[1] += i.water2number;
	wn[2] += i.water3number;
	wn[3] += i.water4number;
}

逻辑链接

&&||

var a = from p in dc.operator
        where (p.operatorid == "a" && p.phone >= 1 || p.name == "Laplace")
        select p.phone;

连接表:

在这里插入图片描述

排序

// 降序
var a = from p in dc.invoice
orderby p.invoiceid descending
select p.invoiceid;
// 升序
var a = from p in dc.invoice
orderby p.invoiceid
select p.invoiceid;

不能对列进行操作

以下的操作均报错,比如System.NotSupportedException: 方法“Int32 Parse(System.String)”不支持转换为 SQL。System.NotSupportedException:“方法“System.String ToString(System.String)”不支持转换为 SQL。意思就是在SQL的语句中,不能对列进行各种更改(int.Parse(p.operatorid)p.date.ToString("{yyyy-MM-dd}")),只能使用原来的值才行(p.operatorid)。

  • 错例1:
var a = from p in dc.@operator
		where(int.Parse(p.operatorid)%2==0)
		select p;

@operator user = a.First();
  • 错例2:模糊查询,利用string字符串匹配,并不是LINQ语句
var a = from p in dc.order
        where (p.date.ToString("{yyyy-MM-dd}").StartsWith(dateTimeString))
        select new { p.water1number, p.water2number, p.water3number, p.water4number };

foreach(var item in a)
{
	this.TextBox.Text = item.water1number;
}
代替方法:比较列的实体,而不对列操作
  • DateTime
    原来p.date.ToString("{yyyy-MM-dd}").StartsWith(dateTimeString)是想转化成字符串比较年月日,既然这种方法不行,那么就比较p.date和它同样的DateTime类型好了。
// 现在时间的DateTime
DateTime dateTime = DateTime.Now;
// 转化成字符串
string dateTimeString = dateTime.ToString("yyyy-MM-dd");

// 这天的起始
string dateTimeStringBegin = dateTimeString + " 00:00:00";
// 这天的结束
string dateTimeStringEnd = dateTimeString + " 23:59:59";
// 再转换成DateTime
DateTime dateTimeBegin = Convert.ToDateTime(dateTimeStringBegin);
DateTime dateTimeEnd = Convert.ToDateTime(dateTimeStringEnd);


DataClasses1DataContext dc = new DataClasses1DataContext();

// 数量
var a = from p in dc.order
        where (p.date >= dateTimeBegin && p.date <= dateTimeEnd)
        select new { p.water1number, p.water2number, p.water3number, p.water4number };

Reference

LINQ 简单用法【1】
模糊查询
简书

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值