(020):操作数据之增删查改(C#)


视频演示: http://u.115.com/file/f2596c101f

光脚总结重点

如果想要查找数据,这怎么总结呢?自己总结吧。

如果想要添加数据,那么首先创建相关的实体类,然后调用InsertOnSubmit()方法。

如果想要更新数据,首先获取这个数据的实体类对象,然后修改。仅此而已,并无什么特殊方法可调用。

如果想要删除数据,首先获取这个要删除的数据实体类对象,然后调用DeleteOnSubmit()方法。

最为重要的是,无论是添加数据、修改数据,还是删除数据,都别忘记调用数据上下文的SubmitChanges(),否则你就准备着前功尽弃吧!

本演练提供了用于在数据库中添加、修改和删除数据的基本端对端 LINQ to SQL 方案。 您将使用 Northwind 示例数据库的一个副本来添加一位客户,更改该客户的姓名,然后删除一个订单。

从Northwind数据库生成的C#代码文件
可以使用对象关系设计器或 SQLMetal 具生成此文件。本演练是通过使用 SQLMetal 工具以及如下命令行编写的:

sqlmetal /code:"C:/linqtest6/Northwind.cs" /language:csharp "C:/linqtest6/Northwind.mdf" /pluralize
有关更多信息,请参见SqlMetal.exe(代码生成工具)。

创建LINQ to SQL解决方案
此任务为第一项任务,在此任务中,您要创建一个 Visual Studio 解决方案,此解决方案包含生成和运行 LINQ to SQL 项目所必需的引用。
1、在 Visual Studio 的“文件”菜单上指向“新建”,然后单击“项目”。
2、在“新建项目”对话框中的“项目类型”窗格中,单击“Visual C#”。
3、在“模板”窗格中,单击“控制台应用程序”。
4、在“名称”框中,键入 LinqDataManipulationApp。
5、在“位置”框中,确认要用于存储项目文件的位置。
6、单击“确定”。

添加LINQ引用和指令
本演练用到默认情况下您的项目中可能未安装的程序集。 如果在您的项目中未将 System.Data.Linq 作为引用列出,请按照以下步骤中的说明添加它。
1、在“解决方案资源管理器”中,右击“引用”,然后单击“添加引用”。
2、在“添加引用”对话框中,依次单击“.NET”、System.Data.Linq 程序集和“确定”。
此程序集即被添加到项目中。
3、在 Program.cs 的顶部添加以下指令:

using System.Data.Linq;
using System.Data.Linq.Mapping;

将Northwind代码文件添加到项目
以下这些步骤假定您已使用 SQLMetal 工具从 Northwind 示例数据库生成代码文件。 有关更多信息,请参见本演练前面的“先决条件”一节。
1、在“项目”菜单上单击“添加现有项”。
2、在“添加现有项”对话框中,导航到 C:/linqtest6/Northwind.cs,然后单击“添加”。
Northwind.cs 文件即被添加到项目中。

设置数据库连接
首先,测试与数据库的连接。如果在后面的步骤中产生错误,请检查 Northwind.cs 文件以确定 Northwind 分部类的拼法。
1、将下面的代码键入或粘贴到 Program 类的 Main 方法中:

// Use the following connection string.
Northwind db = new Northwind(@"c:/linqtest6/Northwind.mdf");

// Keep the console window open after activity stops.
Console.ReadLine();

2、按 F5 在此点测试应用程序。
“控制台”窗口即会打开。
您可以通过如下方法关闭应用程序:在“控制台”窗口中按 Enter,或在 Visual Studio 的“调试”菜单上单击“停止调试”。

创建新实体
创建新实体很简单。 可以使用 new 关键字创建对象(如 Customer)。
在本节及后续各节中,您将只对本地缓存进行更改。 如果您不调用 SubmitChanges,则不会向数据库发送任何更改,一直到本演练结束都是如此。
1、通过在 Main 方法中的 Console.ReadLine(); 前添加如下代码,创建一个新的 Customer:

// Create the new Customer object.
Customer NewCustomer = new Customer();
NewCustomer.CompanyName = "AdventureWorks Cafe";
NewCustomer.CustomerID = "ADVCA";

// Add the customer to the Customers table.
db.Customers.InsertOnSubmit(NewCustomer);

Console.WriteLine("/nCustomers matching CA before insert");

foreach (var Customer in db.Customers.Where(cust => cust.CustomerID.Contains("CA")))
{
    Console.WriteLine("{0}, {1}, {2}",
        Customer.CustomerID,
        Customer.CompanyName,
        Customer.Orders.Count);
}

2、按 F5 调试解决方案。
3、在“控制台”窗口中按 Enter 可停止调试并继续本演练。

更新实体
在以下步骤中,您将检索一个 Customer 对象并修改其属性之一。
将下面的代码添加到 Console.ReadLine(); 上方:

// Query for specific customer.
// First() returns one object rather than a collection.
var ExistingCustomer =
    (from Customer in db.Customers
     where Customer.CustomerID == "ALFKI"
     select Customer)
    .First();

// Change the contact name of the customer.
ExistingCustomer.ContactName = "New Contact";

删除实体
使用同一客户对象,您可以删除第一个订单。
下面的代码演示如何切断行与行之间的关系 ,以及如何从数据库中删除行。 请将下面的代码添加到 Console.ReadLine 前面,以了解如何可以删除对象:
将下面的代码添加到 Console.ReadLine(); 上方紧靠它的位置:

将更改提交到数据库
创建、更新和删除对象所需执行的最后一步是将更改实际提交到数据库。 如不执行这一步,您所做的更改将仅限本地,不会出现在查询结果中。
1、将下面的代码插入到 Console.ReadLine 上方紧靠它的位置:

db.SubmitChanges();

2、将下面的代码插入到 SubmitChanges 后面,以显示提交更改前后的效果:

Console.WriteLine("/nCustomers matching CA after update");
foreach (var CustomerObject in db.Customers.Where(cust =>
    cust.CustomerID.Contains("CA")))
{
    Console.WriteLine("{0}, {1}, {2}",
        CustomerObject.CustomerID,
        CustomerObject.CompanyName,
        CustomerObject.Orders.Count);
}
3、按 F5 调试解决方案。
4、在“控制台”窗口中按 Enter,以关闭应用程序。

说明
通过提交更改添加了新的客户后,您无法再次按原样执行此解决方案。 若要再次执行此解决方案,请更改要添加的客户姓名和客户 ID。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
private void btnCreateEntity_Click(object sender, EventArgs e) { HeaderOfEntity HeaderOfEntity = new HeaderOfEntity(); DataTable dt = new DataTable(); #region 实例化一个实体,并为这个实体类赋值 //实体类名不能为空 if (txtClassName.Text == "") { MessageBox.Show("类名不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { HeaderOfEntity.ClassName = txtClassName.Text.Trim(); } //实体类的说明 if (txtClassExplain.Text != "") { HeaderOfEntity.ClassExplain = txtClassExplain.Text.Trim(); } else { HeaderOfEntity.ClassExplain = ""; } //实体类的作者 if (txtAuthor.Text != "") { HeaderOfEntity.ClassAuthor = txtAuthor.Text.Trim(); } else { HeaderOfEntity.ClassAuthor = ""; } //类的命名空间 if (txtNamespace.Text != "") { HeaderOfEntity.NameSpace = txtNamespace.Text.Trim(); } else { HeaderOfEntity.NameSpace = ""; } #endregion #region 将dataGridView中的数据复制出来,复制到DataTable中,做为参数 //添加列 for (int i = 0; i < dgvAttribute.Columns.Count; i++) { dt.Columns.Add(dgvAttribute.Columns[i].Name); } //添加行 for (int j = 0; j < dgvAttribute.Rows.Count; j++) { DataRow dr = dt.NewRow(); for (int k = 0; k < dgvAttribute.Columns.Count; k++) { dr[k] = dgvAttribute.Rows[j].Cells[k].Value; } dt.Rows.Add(dr); } #endregion string strFileName = "\\" + txtClassName.Text + ".cs"; //实例化一个接口对象 IWriteEntity writeEntity = new WriteEntity(); string strPath = "../../CreateClass"; FileStream fs; if (!File.Exists(strPath + strFileName)) { fs = new FileStream(strPath + strFileName, FileMode.Create,FileAccess.Write); } else { fs = new FileStream(strPath + strFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); } if (writeEntity.Write(fs, dt, HeaderOfEntity) == true) { MessageBox.Show("写入文件成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("写入文件失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值