问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

获取结果为两个表的数据 SQL c#

发布网友 发布时间:2022-04-12 11:35

我来回答

3个回答

懂视网 时间:2022-04-12 15:56

解剖 SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-army-knife-for-mdf-files/ 当我最初开始开发OrcaMDF的时候我只有一个目标,比市面上大部分的书要获取MDF文件内部的更深层次的知识

解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

http://improve.dk/orcamdf-rawdatabase-a-swiss-army-knife-for-mdf-files/

当我最初开始开发OrcaMDF的时候我只有一个目标,比市面上大部分的书要获取MDF文件内部的更深层次的知识

随着时间的推移,OrcaMDF确实做到了。在我当初没有计划的时候,OrcaMDF 已经可以解析系统表,元数据,甚至DMVs。我还做了一个简单UI,让OrcaMDF 更加容易使用。

这很好,但是带来的代价是软件非常复杂。为了自动解析元数据 例如schemas, partitions, allocation units 还有其他的东西,更不要提对于堆表和索引的细节的抽象层了,抽象层需要很多代码并且需要更多的数据库了解。鉴于不同SQLSERVER版本之间元数据的改变,OrcaMDF 目前仅支持SQL Server 2008 R2。然而,数据结构是相对稳定的,元数据的存储方式只有一点不同,使用DMVs暴露数据等等。要让OrcaMDF 正常运行,需要元数据是完好无损的,这就导致当SQLSERVER损坏的时候OrcaMDF 也是一样的。遇到损坏的boot page吗?无论SQLSERVER还是 OrcaMDF 都不能解析数据库

向RawDatabase问好
我在憧憬OrcaMDF 的未来 和如何使用他才是最有用的。我能够不断增加新的特性进去以使SQLSERVER支持什么功能他也支持,最终使得他能100%解析MDF文件。但是意义何在?当然,这是一个很好的学习机会,不过重点是,你使用软件读取数据,SQLSERVER能比你做得更好。所以,该如何选择?

RawDatabase, 参照Database 类,他不会尝试解析任何东西除非你让他去解析。
他不会自动解析schemas。他不知道系统表。他不知道DMVs。然而他知道SQLSERVER数据结构和给他一个接口他可以直接读取MDF文件。

让RawDatabase 只解析数据结构意味着他可以跳过损坏的系统表或者损坏的数据

例子
这个工具还在开发的早起,不过让我展示一下使用RawDatabase能够做什么东西。
当我运行LINQPad上的代码,他很容易的显示出结果,结果只是标准的.NET 对象。
所有的例子都在AdventureWorks 2008R2 LT (Light Weight)数据库上运行


获取单个页面
很多时候,我们只需要解析单个页面

// Get page 197 in file 1
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.GetPage(1, 197).Dump();

解析页头
现在我们获取到页面,我们如何把页头dump出来

// Get the header of page 197 in file 1
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.GetPage(1, 197).Header.Dump();

解析行偏移阵列
就像页头那样,我们也可以把页尾的行偏移阵列条目dump出来

// Get the slot array entries of page 197 in file 1
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.GetPage(1, 197).SlotArray.Dump();

解析数据记录
当获取到行偏移条目的原始数据,你通常想看一下数据行记录的内容。幸运的是,这也很容易做到

// Get all records on page 197 in file 1
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.GetPage(1, 197).Records.Dump();

从记录中检索数据
一旦你得到记录,你现在可以利用FixedLengthData 或者 VariableLengthOffsetValues 属性
去获取原始的定长数据内容和变长数据内容。然而,你肯定只想获取到实际的已解析的数据值。
对于解析,OrcaMDF会帮你解析,你只需要为他提供schema.

// Read the record contents of the first record on page 197 of file 1
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
RawPrimaryRecord firstRecord = (RawPrimaryRecord)db.GetPage(1, 197).Records.First();

var values = RawColumnParser.Parse(firstRecord, new IRawType[] {
 RawType.Int("AddressID"),
 RawType.NVarchar("AddressLine1"),
 RawType.NVarchar("AddressLine2"),
 RawType.NVarchar("City"),
 RawType.NVarchar("StateProvince"),
 RawType.NVarchar("CountryRegion"),
 RawType.NVarchar("PostalCode"),
 RawType.UniqueIdentifier("rowguid"),
 RawType.DateTime("ModifiedDate")
});
 
values.Dump();

RawColumnParser.Parse方法做的事情是 跟他一个schema,他帮你自动将raw bytes转换为Dictionary,key就是从schema 那里获取到的列名,

而value就是数据列的实际值,例如int,short,guid,string等等。让你的用户给定schema, OrcaMDF 可以跳过大量的依赖的元数据进行解析,因此可以忽略可能的元数据错误带来的数据读取失败。

由于页头已经给出了 NextPageID 和 PreviousPageID属性 ,这能够让软件简单的遍历链表中的所有页面,并解析这些页面里面的数据 --他基本上是根据给定的allocation unit来进行扫描

过滤页面
除非检索一个特定的页面,RawDatabase 也有一个页面属性能够枚举数据库中的所有页面。
使用这个属性,举个例子,获取数据库中所有的IAM页面的列表

// Get a list of all IAM pages in the database
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.Pages
 .Where(x => x.Header.Type == PageType.IAM)
 .Dump();


并且由于这是使用LINQ技术,这很容易去设计你想要的属性。
举个例子,你可以获取所有的 index pages 和他们的 slot counts 就像这样:

// Get all index pages and their slot counts
var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.Pages
 .Where(x => x.Header.Type == PageType.Index)
 .Select(x => new {
 x.PageID,
 x.Header.SlotCnt
 }).Dump();

或者假设你想获得如下条件的页面
1、页面里面至少有一条记录
2、free space空间至少有7000 bytes

下面是page id, free count, record count 和 平均记录大小的输出

var db = new RawDatabase(@"C:AWLT2008R2.mdf");
db.Pages
 .Where(x => x.Header.FreeCnt > 7000)
 .Where(x => x.Header.SlotCnt >= 1)
 .Where(x => x.Header.Type == PageType.Data)
 .Select(x => new {
 x.PageID,
 x.Header.FreeCnt,
 RecordCount = x.Records.Count(),
 RecordSize = (8096 - x.Header.FreeCnt) / x.Records.Count()
 }).Dump();

最后一个例子,,假设你只有一个MDF文件并且你已经忘记了有哪些对象存储在MDF文件里面。
不要紧,我们只需要查询系统表sysschobjs !sysschobjs 系统表包含了所有对象的数据
并且幸运的是,他的object ID 是 34。利用这些信息,我们可以把所有属于object ID 34的数据页面
过滤出来,并且从这些页面里读取记录并只需要解析这个表的前两列(你可以定义一个分部schema, 只要你在最后忽略列)

最后我们只需要把名称dump出来(当然我们可以把表里的所有列都查询出来,如果我们想的话)

SELECT * FROM sys.sysschobjs 

var db = new RawDatabase(@"C:AWLT2008R2.mdf");

var records = db.Pages
 .Where(x => x.Header.ObjectID == 34 && x.Header.Type == PageType.Data)
 .SelectMany(x => x.Records);
 
var rows = records.Select(x => RawColumnParser.Parse((RawPrimaryRecord)x, new IRawType[] {
 RawType.Int("id"),
 RawType.NVarchar("name")
}));

rows.Select(x => x["name"]).Dump();


兼容性
可以看到 RawDatabase并不依赖于元数据,这很容易兼容多个版本的SQLSERVER。
因此,我很高兴的宣布:RawDatabase 完全兼容SQL Server 2005, 2008, 2008R2 , 2012.
这也有可能兼容2014,不过我还未进行测试。说到测试,所有的单元测试都是自动运行的
在测试期间使用AdventureWorksLT for 2005, 2008, 2008R2 and 2012 。
现在有一些测试demo来让OrcaMDF RawDatabase去解析AdventureWorks LT 数据库里面每个表的每条记录

数据损坏
其中一个有趣的使用RawDatabase 的方法是用来附加损坏的数据库。你可以检索特定object id的所有页面然后硬解析每个页面
无论他们是否是可读的。如果元数据损坏,你可以忽略他,你手工提供schema (输入表的每个列的列名)并且只需要沿着页面链表
或者解析IAM页面去读取堆表里面的数据。接下来的几个星期我将会 写一些关于OrcaMDF RawDatabase 的使用场景的博客,其中包括数据损坏

源代码和反馈
我非常兴奋因为最新的RawDatabase 已经添加到OrcaMDF 里面并且我希望不单只只有我一个见证他的威力。
如果你也想试一试,或者有任何想法,建议或者其他反馈,我都很乐意接受。

如果你想试用,在GitHub上签出OrcaMDF项目。一旦这个工具做得比较完美了,我会把他放上去NuGet 。
就好像OrcaMDF一样,在GPL v3 licensed 下发布

第十六篇完

热心网友 时间:2022-04-12 13:04

问题补充:

选择N'ab',N'ab',N'bc',N'bc',N'ABC',N'ab',N'ab',N'ac ',N'ABC',N'ab'

选择N'ab',N'ab',N'bc',N'bc',N'ABC',N'ab',N'ab“ ,N'ac',N'ABC',N'ab“

微软专家吴曦你能具体解释一下上面的语句的意思,因为我想比较数以万计的记录,将不是每个程序是这么写的吧!

的表已记录几万,B表有800条记录,A表中每条记录,并且在B表中每条记录的每个记录比较表A和表B 800比较记录在表A中的比较结果后800新字段的存储书面记录。

上面的脚本是生成测试数据,再加上N'' - 用于生成数据类型为nvarchar符号,有特殊字符解剖。

b.ID,当没有条件,需要确保一个只有一个数据表/>两个表。

没有多少关系,将产生一个结果集,笛卡尔

初级卫生 - > - >(罗伊)生成测试数据

DECLARE @一个表([1]为nvarchar(1),[2]为nvarchar(1),[3]为nvarchar(1),[4]为nvarchar(1),[5]为nvarchar(1),[6]为nvarchar(1),[ 7]数据类型为nvarchar(1),[8]为nvarchar(1),[9]为nvarchar(1),[10]为nvarchar(1))

插入@阿

选择N'A',N' C',N'A',N'b',N'A',N'b',N'C',N'C',N'A',N'b“

- >; - >(罗伊)来产生测试数据

DECLARE @乙表([1]为nvarchar(2),[2]为nvarchar(2),[3]为nvarchar(2),[4]为nvarchar (2),[5]为nvarchar(3),[6]为nvarchar(2),[7]为nvarchar(2),[8]为nvarchar(2),[9]为nvarchar(3),[10]为nvarchar(2 ))

插入@乙

选择N'ab',N'ab',N'bc',N'bc',N'ABC',N'ab',N'ab',N '交流',N'ABC',N'ab“

选择。 *,情况。 [1] LIKE'%'+ A。 [1] +'%',那么1,否则为0结束+

情况下当b。 [2] LIKE'%'+ A。 [2] +'%',那么1,否则为0结束+

情况下当b。 [3] LIKE'%'+ A。 [3] +'%',那么1,否则为0结束+

情况下当b。 [4] LIKE'%'+ A。 [4] +'%',那么1,否则为0结束+

情况下当b。 [5] LIKE'%'+ A。 [5] +'%',那么1,否则为0结束+

情况下当b。 [6] LIKE'%'+ A。 [6] +'%',那么1,否则为0结束+

情况下当b。 [7] LIKE'%'+ A。 [7] +'%',那么1,否则为0结束+

情况下当b。 [8] LIKE'%'+ A。 [8] +'%',那么1,否则为0结束+

情况下当b。 [9] LIKE'%'+ A。 [9] +'%',那么1,否则为0结束+

情况下当b。 [10]如'%'+ A。 [10] +'%',那么1,否则为0结尾作为新列

从@ A中,@ B B

(1行受影响)

1 2 3 4 5 6 7 8 9 10新列

------------------------------------ ---------------

acababccab 7

(1行受影响的影响)

热心网友 时间:2022-04-12 14:22

以下是查询整表并显示在DataGridView

DataTable table = new DataTable();
string cnString = "Data source=.;integrated security =true ;database=数据库名称";
string selectDataSourceExpress = "Select * From 表名";
SqlDataAdapter adapter = new SqlDataAdapter(selectDataSourceExpress, cnString);
adapter.Fill(table); //绑定数据源至窗口的DataGridView
dataGridView1.DataSource = table;追问我不是想要加载数据到DataGridView,是想要将他加载到2个2维数组里。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 三星手机闹钟到点不提示,不响铃。提示界面都没有。到点闹钟小图标就自己消失了 三星手机为什么关机了闹铃就不响了? 三星手机 为什么关机了闹铃就不响了 三星s5闹铃响后.手机屏幕就一直亮着怎么回事. AJ6首次推出复刻版本在哪一年 凭什么越是发达的地区越注重垃圾分类? 如何可以得到aj英雄联盟特殊鞋盒? 三星6s设置的闹钟,稍后提醒关掉了,闹钟还是连续响三遍。 在哪买到的nikeaj既是正品价格又相对比较低 飞人乔丹篮球鞋最后面是白色且突出来了,有乔丹蓝色的标志,前面是银色,请问是哪双 aj有出过银色外套吗? 有谁知道aj的big fund这双鞋 可以帮忙细说一下吗? 我的手机是三星D508的,为什么最近闹钟关掉了,可是一到时间,闹钟又会响啊 解决橡胶手柄老化粘手 大家能帮我看下这张图里的鞋子都是哪些,譬如银色的是AJ 6情人节 543390-009 一双aj 1亮银应该有几条鞋带? 哇,看到这闪闪发光的AJ标志了吗,哇,还有 谁知道一双AJ,主体银色,亮黑小边,金色标在侧面,后帮黑色有23号,求图或者网站,急,谢谢!!!! aj鞋面上有银色的点是哪双。aj5的 乔丹AJ什么货号的,银色能发光的 梦见死人又死了别人抬去埋我还帮着埋 梦见死了人分了尸用筐抬着去埋? 房产融资租赁到期后无偿转让所有权 是否缴纳土地增值税和契税 如何清洁电动剃须刀,博朗剃须刀清洁 公司以融资租赁方式租入房产,房产税如何缴纳 七星瓢虫会捉哪里的害虫? 对于融资租赁的房产,应按什么计征房产税 如何把linux后台执行的程序恢复 融资租赁要不要交契税 融资租赁有那些税收优惠 融资租赁的房产在什么时候缴纳房产税? 融资租赁的房产,谁来缴纳房产税啊 融资租赁税费问题 M30和M40砂浆的配比各是多少啊 M40水泥砂浆的配合比 隧洞锚杆砂浆配合比标准是多少 锚杆注浆水泥浆配合比 m40硫铝酸盐水泥砂浆配合比? 水泥砂浆标号 水泥砂浆配比 黏度与配比的综合影响