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

文章目录

  • 一、创建 DataClasses1.dbml 文件
  • 二、LINQ增
  • 三、LINQ查询
    • 1.简写
    • 2.详写
      • 选择某个属性
      • 选择多个属性:
      • 逻辑链接
      • 连接表:
      • 排序
      • 不能对列进行操作
        • 代替方法:比较列的实体,而不对列操作
  • Reference


一、创建 DataClasses1.dbml 文件

C#之在.aspx.cs代码中对数据库的操作_第1张图片
C#之在.aspx.cs代码中对数据库的操作_第2张图片

表的各种东西拖进来就自动生成了,比如这个外键关系。
C#之在.aspx.cs代码中对数据库的操作_第3张图片
C#之在.aspx.cs代码中对数据库的操作_第4张图片
现在就可以使用DataClasses1DataContext dc = new DataClasses1DataContext();了。

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

  • .layout:布局文件,don’t care.
  • .designer.cs:是到时候怎么使用表对应的代码,和数据库基本一致。
    C#之在.aspx.cs代码中对数据库的操作_第5张图片
    看到这个@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;

连接表:

C#之在.aspx.cs代码中对数据库的操作_第6张图片

排序

// 降序
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】
模糊查询
简书

你可能感兴趣的:(C#,&,.NET)