表左式中文教程_第1頁
表左式中文教程_第2頁
表左式中文教程_第3頁
表左式中文教程_第4頁
表左式中文教程_第5頁
已閱讀5頁,還剩81頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LINQ初體驗之LINQ to Object1一步一步學Linq to sql(一):預備知識4一步一步學Linq to sql(二):DataContext與實體9一步一步學Linq to sql(三):增刪改15一步一步學Linq to sql(四):查詢句法21一步一步學Linq to sql(五):存儲過程35一步一步學Linq to sql(六):探究特性46一步一步學Linq to sql(七):并發與事務53一步一步學Linq to sql(八):繼承與關系60一步一步學Linq to sql(九):其它補充69一步一步學Linq to sql(十):分層構架的例子73Linq

2、To Xml學習80Linq To Xml學習 1. 概述80Linq To Xml學習 2 編程概述82C# 2008 學習筆記 - LINQ to XML87一、命名空間87二、編程方式創建XML文檔88三、使用 LINQ 查詢創建XML文檔89四、加載和解析XML內容90六、遍歷內存中的XML文檔90七、修改 XML文檔92使用linq to xml 快速創建自己的Rss93LINQ初體驗之LINQ to ObjectVS2008的發布,最激動人心的不過是LINQ的誕生。Whats LINQ? Language Integrated Query 是也。說得再明白一些,這是編程語言的一種新

3、特性,能夠將數據查詢語句集成到編程語言中。目前,LINQ支持的語言有C# 和 VB。為啥會有LINQ,主要還是因為現在的數據格式越來越多,數據庫、XML、數組、哈希表每一種都有自己操作數據的方式,學起來費事費力。于是,就有了LINQ誕生的理由以一種統一的方式操作各種數據源,減少數據訪問的復雜性。LINQ帶來很多開發上的便利。首先,他可以利用Visual Studio這個強大的IDE(這話決不是吹,Visual Studio絕對是最好用的開發工具之一),至少用Visual Studio來寫SQL語句,可以有智能感知了,比起從前用查詢分析器寫存儲過程的感覺好多了!其次,它可以把數據當成一個對象來操

4、作,即 Data = Object? 的問題。LINQ目前可以對XML, Object, SQL做數據訪問,今后還會有LINQ to Entity的功能。說來慚愧,我也是剛剛才接觸LINQ,先從最簡單的開始吧,做一個LINQ to Object的例子,實現一個對數組的操作。這個例子套用了今年TechED中海洋兄講的例子,在此聲明。在這個例子中,我會先通過GetMethods的方法,拿到string的所有方法,接下來,就看LINQ的厲害了,這里是選出所有非靜態的方法簽名。MethodInfo methods = typeof(string).GetMethods()

5、; var result = from m in methods where m.IsStatic != true select m.Name; foreach (var r in result) Console.WriteLine(r.ToString(); Console.ReadLine();例子雖然簡單,確能從中看出LINQ的一些端倪。首先,var是什么東東?看起來,有點像javascript里面的弱類型的變量聲明。但是,C#是強類型的,盡管你用v

6、ar來聲明,編譯器還是可以根據上下文推倒出它當前的類型。比如這個例子里面,result就是IEnumerable 類型的。在這里面,寫IEnumerable和寫var是一樣效果的,顯然,var會簡單得多。你不用考慮數據操作的返回值是什么類型,還能享受強類型聲明帶來的方便實惠還有from m in methods這句,m是什么東西,m是隱式聲明的一個變量,盡管沒有聲明,但編譯器根據上下文,推斷出它的類型是MethodInfo型的!.NET Framework 3.5的編譯器的確是聰明了很多 上面這個例子運行起來的結果中有很多重復的記錄,我們可以用distinct()來過濾掉重復的,和SQL還是很

7、相似的說。var result = (from m in methods where m.IsStatic != true select m.Name).Distinct();或者用group by 也可以var result = from m in methods where m.IsStatic != true group m by m.Name;但是這樣子寫,在輸出的時候

8、,顯示的是 System.Linq.Lookup2+GroupingSystem.String,System.Reflection.MethodInfo,所以,再做一些修改var result = from m in methods where m.IsStatic != true group m by m.Name into g select new  MethodName = g.Key, O

9、verload = g.Count() 這里面又有一些新鮮的了select new MethodName = g.Key, Overload = g.Count() ,先來看一個簡單一些的例子:class MyClass public string MethodName  get; set;  public int Overload  get; set;  class Program MyClass mc 

10、= new MyClass  MethodName = "aaa", Overload = 2  大括號里面的叫類初始化器,省去了構造函數,在new的同時,給對象的屬性賦值。這時候再回來看看select new MethodName = g.Key, Overload = g.Count() ,跟這個類初始化器很像吧,但是它更偷懶,new一個新對象,居然連類名都不寫。沒錯,這就叫匿名類。不用寫類的聲明,直接實例化。類的名字是由編譯器在編譯的時候自動生成的,也就是說,你在new

11、的時候根本不知道這個類叫啥名,因此,這里就只能用var了。這就更看出var的厲害了,不僅僅是寫起來方便這么簡單,在用到匿名類的時候,沒有類名,這時候只能用var,嘿嘿!一步一步學Linq to sql(一):預備知識2007-08-14 09:00 作者: lovecherry 出處: 天極網 責任編輯:>dizzarz什么是Linq to sqlLinq to sql(或者叫DLINQ)是LINQ(.NET語言集成查詢)的一部分,全稱基于關系數據的 .NET 語言集成查詢,用于以對象形式管理關系數據,并提供了豐富的查詢功能,它和Linq to xml、Linq to objects、L

12、inq to dataset、Linq to entities等組成了強大的LINQ。要學好LINQ查詢語法,就不得不先理解C# 3.0的一些新特性,下面一一簡單介紹。隱含類型局部變量var age = 26; var username = "zhuye" var userlist = new  "a","b","c" foreach(var user in userlist)

13、 Console.WriteLine(user);純粹給懶人用的var關鍵字,告訴編譯器(對于CLR來說,它是不會知道你是否使用了var,苦力是編譯器出的),你自己推斷它的類型吧,我不管了。但是既然讓編譯器推斷類型就必須聲明的時候賦值,而且不能是null值。注意,這只能用于局部變量,用于字段是不可以的。匿名類型var data = new username = "zhuye",age = 26; Console.WriteLine("username:0 age:1"

14、;, data.username, data.age);匿名類型允許開發人員定義行內類型,無須顯式定義類型。常和var配合使用,var用于聲明匿名類型。定義一個臨時的匿名類型在LINQ查詢句法中非常常見,我們可以很方便的實現對象的轉換和投影。擴展方法public static class helper public static string MD5Hash(this string s) return System.Web.Security.FormsAuthentication.Ha

15、shPasswordForStoringInConfigFile(s,"MD5"); public static bool In(this object o, IEnumerable b) foreach(object obj in b) if(obj=o) return true; return false; / 調用擴展方法 Console.WriteLine("123456".MD5Hash(); Console.Wri

16、teLine("1".In(new"1","2","3");很多時候我們需要對CLR類型進行一些操作,苦于無法擴展CLR類型的方法,只能創建一些helper方法,或者生成子類。擴展方法使得這些需求得意實現,同時也是實現LINQ的基礎。定義擴展方法需要注意,只能在靜態類中定義并且是靜態方法,如果擴展方法名和原有方法名發生沖突,那么擴展方法將失效。自動屬性public class Person public string username  get; 

17、;protected set;  public int age  get; set;  public Person() this.username = "zhuye" Person p = new Person(); /p.username = "aa" Console.WriteLine(p.username);意義不是很大,純粹解決機械勞動。編譯器自動為你生成get、set操作以及字

18、段,并且你不能使用字段也不能自定義get、set操作,不過你可以分別定義get和set的訪問級別。對象初始化器public class Person public string username  get; set;  public int age  get; set;  public override string ToString() return string.Format("username:0&#

19、160;age:1", this.username, this.age); Person p = new Person() username = "zhuye", age=26; Console.WriteLine(p.ToString();編譯器會自動為你做setter操作,使得原本幾行的屬性賦值操作能在一行中完成。這里需要注意:· 允許只給一部分屬性賦值,包括internal訪問級別 · 可以結合構造函數一起使用,并且構造函數初始化先于對象初

20、始化器執行集合初始化器public class Person public string username  get; set;  public int age  get; set;  public override string ToString() return string.Format("username:0 age:1", this.username, th

21、is.age); var persons = new List  new Person username = "a", age=1, new Person username = "b", age=2; foreach(var p in persons) Console.WriteLine(p.ToString();編譯器會自動為你做集合插入操作。如果你為Hashtable初始化

22、的話就相當于使用了兩個對象初始化器。Lambda表達式var list = new   "aa", "bb", "ac"  var result = Array.FindAll(list, s => (s.IndexOf("a") > -1); foreach (var v in result)

23、Console.WriteLine(v);其實和2.0中的匿名方法差不多,都是用于產生內聯方法,只不過Lambda表達式的語法更為簡潔。語法如下:(參數列表) => 表達式或者語句塊其中:參數個數:可以有多個參數,一個參數,或者無參數。表達式或者語句塊:這部分就是我們平常寫函數的實現部分(函數體)。前面的示例分別是1個參數的例子,下面結合擴展方法來一個復雜的例子:public delegate int mydg(int a, int b); public static class LambdaTes

24、t public static int oper(this int a, int b, mydg dg) return dg(a, b); Console.WriteLine(1.oper(2, (a, b) => a + b); Console.WriteLine(2.oper(1, (a, b) => a - b);查詢句法var perso

25、ns = new List  new Person username = "a", age=19, new Person username = "b", age=20, new Person username = "a", age=21, ; var selectperson = from p in

26、 persons where p.age >= 20 select p.username.ToUpper(); foreach(var p in selectperson) Console.WriteLine(p);查詢句法是使用標準的LINQ查詢運算符來表達查詢時一個方便的聲明式簡化寫法。該句法能在代碼里表達查詢時增進可讀性和簡潔性,讀起來容易,也容易讓人寫對。Visual Studio 對查詢句法提供了完整的智能感應和編譯時檢查支持。編譯器在底層把查詢句法的表達式翻譯成明確的方法調用代

27、碼,代碼通過新的擴展方法和Lambda表達式語言特性來實現。上面的查詢句法等價于下面的代碼:var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper();LINQ查詢句法可以實現90%以上T-SQL的功能(由于T-SQL是基于二維表的,所以LINQ的查詢語法會比T-SQL更簡單和靈活),但是由于智能感應的原因,select不能放在一開始就輸入。一步一步學Linq to sql(二):DataContext與實體2007-08-24 00:00 作者: L

28、oveCherry 出處: 天極網 責任編輯:>dizzarzDataContext       DataContext類型(數據上下文)是System.Data.Linq命名空間下的重要類型,用于把查詢句法翻譯成SQL語句,以及把數據從數據庫返回給調用方和把實體的修改寫入數據庫。·        DataContext提供了以下一些使用的功能: ·        以日志形式記錄DataCo

29、ntext生成的SQL ·        執行SQL(包括查詢和更新語句) ·        創建和刪除數據庫     DataContext是實體和數據庫之間的橋梁,那么首先我們需要定義映射到數據表的實體。 定義實體類using System.Data.Linq.Mapping; Table(Name = "Customers") public 

30、class Customer     Column(IsPrimaryKey = true)     public string CustomerID get; set;     Column(Name = "ContactName")     public string Name  ge

31、t; set;      Column     public string City get; set;        以Northwind數據庫為例,上述Customers類被映射成一個表,對應數據庫中的 Customers表。然后在類型中定義了三個屬性,對應表中的三個字段。其中,CustomerID字段是主鍵,如果沒有指定Column特性的Name屬性,那么系統會把屬性名作為數據表的字段名,也

32、就是說實體類的屬性名就需要和數據表中的字段名一致。       現在,創建一個ASP.NET頁面,然后在頁面上加入一個GridView控件,使用下面的代碼進行綁定數據: using System.Data.Linq; DataContext ctx = new DataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); Table<Customer> Customers 

33、= ctx.GetTable<Customer>(); GridView1.DataSource = from c in Customers where c.CustomerID.StartsWith("A") select new 顧客ID=c.CustomerID, 顧客名=c.Name, 城市=c.City; GridView1.DataBind();        使

34、用DataContext類型把實體類和數據庫中的數據進行關聯。你可以直接在DataContext的構造方法中定義連接字符串,也可以使用IDbConnection: using System.Data.SqlClient; IDbConnection conn = new SqlConnection("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); DataContext ctx = new DataContext(conn); 

35、;      之后,通過GetTable獲取表示底層數據表的Table類型,顯然,數據庫中的Customers表的實體是Customer類型。隨后的查詢句法,即使你不懂SQL應該也能看明白。從Customers表中找出CustomerID以“A”開頭的記錄,并把CustomersID、Name以及City封裝成新的匿名類型進行返回。       結果如下圖:  強類型DataContext public partial class

36、60;NorthwindDataContext : DataContext     public Table<Customer> Customers;     public NorthwindDataContext(IDbConnection connection) : base(connection)       public NorthwindData

37、Context(string connection) : base(connection)          強類型數據上下文使代碼更簡潔: NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); GridView1.DataSource = from 

38、;c in ctx.Customers where c.CustomerID.StartsWith("A") select new  顧客ID = c.CustomerID, 顧客名 = c.Name, 城市 = c.City  GridView1.DataBind();       DataContext其實封裝了很多實用的功能,下面一一介紹。&

39、#160;日志功能 using System.IO; NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); / Append ctx.Log&

40、#160;= sw; GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new  顧客ID = c.CustomerID, 顧客名 = c.Name, 城市 = c.City  GridView1.DataBind(); sw.Close()

41、;       運行程序后在網站所在目錄生成了log.txt,每次查詢都會把諸如下面的日志追加到文本文件中:        應該說這樣的日志對于調試程序是非常有幫助的。 探究查詢 using System.Data.Common; using System.Collections.Generic; NorthwindDataContext ctx = new NorthwindDataContex

42、t("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); var select = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new  顧客ID = c.CustomerID, 顧客名 = c.Name, 城市 = c.Ci

43、ty  DbCommand cmd = ctx.GetCommand(select); Response.Write(cmd.CommandText + "<br/>"); foreach (DbParameter parm in cmd.Parameters)     Response.Write(string.Format("參數名:0,參數值:1<br/>", parm.Par

44、ameterName, parm.Value); Customer customer = ctx.Customers.First(); customer.Name = "zhuye" IList<object> queryText = ctx.GetChangeSet().ModifiedEntities; Response.Write(Customer)queryText0).Name);       在這里,我

45、們通過DataContext的GetCommand方法獲取了查詢對應的DbCommand,并且輸出了CommandText和所有的DbParameter。之后,我們又通過GetChangeSet方法獲取了修改后的實體,并輸出了修改內容。 執行查詢 NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); string newcity = &q

46、uot;Shanghai" ctx.ExecuteCommand("update Customers set City=0 where CustomerID like 'A%'", newcity); IEnumerable<Customer> customers = ctx.ExecuteQuery<Customer>("select * from Customers

47、0;where CustomerID like 'A%'"); GridView1.DataSource = customers; GridView1.DataBind();       前一篇文章已經說了,雖然Linq to sql能實現90以上的TSQL功能。但是不可否認,對于復雜的查詢,使用TSQL能獲得更好的效率。因此,DataContext類型也提供了執行SQL語句的能力。代碼的執行結果如下圖:  創建數據庫testContext

48、 ctx = new testContext("server=xxx;database=testdb;uid=xxx;pwd=xxx"); ctx.CreateDatabase(); Table(Name = "test") public class test     Column(IsPrimaryKey = true, IsDbGenerated = true)  

49、0;  public int ID  get; set;      Column(DbType="varchar(20)")     public string Name  get; set;  public partial class testContext : DataContext  

50、0;  public Table<test> test;     public testContext(string connection) : base(connection)   testContext ctx = new testContext("server=xxx;database=testdb;uid=xxx;pwd=xxx");ctx.CreateDatabase(); Table(Name = &q

51、uot;test")public class test    Column(IsPrimaryKey = true, IsDbGenerated = true)    public int ID get; set;      Column(DbType="varchar(20)")    public string Name get; set;  public partial class testContext : DataC

52、ontext    public Table<test> test;    public testContext(string connection) : base(connection)        這段代碼在數據庫中創建了名為testdb的數據庫,等同于下面的腳本:CREATE TABLE dbo.test(     ID int IDENTITY(1,1) NOT&#

53、160;NULL,     Name varchar(20) COLLATE Chinese_PRC_CI_AS NULL,  CONSTRAINT PK_test PRIMARY KEY CLUSTERED  (     ID ASC )WITH (IGNORE_DUP_KEY = OFF) ON PRIMARY ) ON PRIMAR

54、Y       同時,DataContext還提供了DeleteDatabase()方法,在這里就不列舉了。 使用DbDataReader數據源 using System.Data.SqlClient; var conn = new SqlConnection("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); var ctx = new DataContex

55、t(conn); var cmd = new SqlCommand("select * from customers where CustomerID like 'A%'", conn); conn.Open();  var reader = cmd.ExecuteReader();         GridView1.D

56、ataSource = ctx.Translate<Customer>(reader); GridView1.DataBind(); conn.Close();       你同樣可以選擇使用DataReader獲取數據,增加了靈活性的同時也增加了性能。 看到這里,你可能會覺得手工定義和數據庫中表對應的實體類很麻煩,不用擔心,VS2008提供了自動生成實體類以及關系的工具,工具的使用將在以后講解。今天就講到這里,和DataContext相關的事務、加載選項、并發選項以及關系實體等高級內容也將在

57、以后講解。一步一步學Linq to sql(三):增刪改2007-10-20 00:00 作者: lovecherry 出處: 天極網 責任編輯:>dizzarz      示例數據庫字段名字段類型允許空字段說明IDuniqueidentifier 表主鍵字段UserNamevarchar(50) 留言用戶名PostTimedatetime 留言時間Messagevarchar(400)留言內容IsRepliedbit 留言是否回復Replyvarchar(400)留言管理員回復 

58、0;     在數據庫中創建一個名為GuestBook的數據庫,在里面創建一個tbGuestBook的表,結構如上表。 生成實體類        右鍵點擊網站項目,選擇添加新項,然后選擇“Linq to sql Classes”,命名為GuestBook。然后打開App_Code里面的GuestBook.dbml。設計視圖上的文字提示你可以從服務器資源管理器或者攻擊箱拖動項到設計界面上來創建實體類。       那么

59、,我們就在服務器資源管理器中創建一個指向GuestBook數據庫的數據連接,然后把tbGuestBook表拖動到GuestBook.dbml的設計視圖上,按CTRL+S保存。打開GuestBook.designer.cs可以發現系統自動創建了GuestBook數據庫中tbGuestBook表的映射,如下圖:  簡易留言簿        現在,我們就可以使用Linq to sql完成簡易留言簿了。實現以下功能:·        

60、  發表留言(增) ·          查看留言(查) ·          管理員回復留言(改) ·          管理員刪除留言(刪除)首先,創建一個Default.aspx,在頁面上加入一些控件:<div>        &#

61、160;姓名         <asp:TextBox ID="tb_UserName" runat="server"></asp:TextBox><br />         <br />         留言  

62、60;      <asp:TextBox ID="tb_Message" runat="server" Height="100px" TextMode="MultiLine" Width="300px"></asp:TextBox><br />         

63、<br />         <asp:Button ID="btn_SendMessage" runat="server" Text="發表留言" OnClick="btn_SendMessage_Click" /><br />         <

64、;br />         <asp:Repeater ID="rpt_Message" runat="server">         <ItemTemplate>         <table width="600px"

65、; style="border:solid 1px #666666; font-size:10pt; background-color:#f0f0f0">             <tr>             <td align="left&

66、quot; width="400px">             <%# Eval("Message")%>             </td>           &#

67、160; <td align="right" width="200px">             <%# Eval("PostTime")%> - <%# Eval("UserName")%>         &

68、#160;   </td>             </tr>             <tr>             <td colspan="

69、2" align="right">             <hr width="300px" />             管理員回復:<%# Eval("IsReplied").ToString() = 

70、;"False" ? "暫無" : Eval("Reply")%>             </td>             </tr>       

71、0;            </table>         <br/>         </ItemTemplate>         </asp:Repeater>   

72、0; </div>        你可能很難想象,使用Linq to sql進行數據訪問會是這么簡單,后臺代碼: public partial class _Default : System.Web.UI.Page      GuestBookDataContext ctx = new GuestBookDataContext("ser

73、ver=xxx;database=GuestBook;uid=xxx;pwd=xxx");             protected void Page_Load(object sender, EventArgs e)              if (!IsPostBack)  

74、60;                   SetBind();                   protected void btn_SendMessage_Click(object sender, EventAr

75、gs e)              tbGuestBook gb = new tbGuestBook(); gb.ID = Guid.NewGuid();         gb.UserName = tb_UserName.Text;       

76、  gb.Message = tb_Message.Text;         gb.IsReplied = false;         gb.PostTime = DateTime.Now;         ctx.tbGuestBooks.Add(gb);  &#

77、160;      ctx.SubmitChanges();         SetBind();          private void SetBind()              rpt_Message.DataSource

78、60;= from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb;         rpt_Message.DataBind();             前面創建Linq to sql Classes的時候我們輸入名字GuestBook,系統就為

79、我們自動創建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到類定義)。在綁定的時候我們使用查詢句法查詢留言表中所有留言,按照發表時間倒序(天哪?這是數據訪問嗎?好像僅僅定義了一句SQL啊)。在發表留言按鈕中,我們為一個tbGuestBook賦值,然后把它加入留言表,再提交更改,就這樣完成了記錄的插入。       運行效果如下圖:        然后,再創建一個Admin.aspx,前臺代碼如下: <div

80、>         <asp:Repeater ID="rpt_Message" runat="server" OnItemCommand="rpt_Message_ItemCommand">         <ItemTemplate>       

81、0; <table width="600px" style="border:solid 1px #666666; font-size:10pt; background-color:#f0f0f0">             <tr>          &#

82、160;  <td align="left" width="400px">             <%# Eval("Message")%>             </td>    

83、;         <td align="right" width="200px">             <%# Eval("PostTime")%> - <%# Eval("UserName")%> 

84、0;           </td>             </tr>             <tr>          

85、;   <td colspan="2" align="right">             <hr width="300px" />             <asp:Button ID=

86、"btn_DeleteMessage" runat="server" Text="刪除留言" CommandName="DeleteMessage" CommandArgument='<%# Eval("ID")%>'/>             管理員回復:<asp:TextBox

87、60;runat="server" ID="tb_Reply" TextMode="MultiLine" Width="300px" Text='<%# Eval("Reply")%>'/>             <asp:Button ID="btn_SendRep

88、ly" runat="server" Text="發表回復" CommandName="SendReply" CommandArgument='<%# Eval("ID")%>'/>             </td>       &

89、#160;     </tr>                    </table>         <br/>         </ItemTemplat

90、e>         </asp:Repeater>     </div>       后臺代碼: public partial class Admin : System.Web.UI.Page     GuestBookDataContext ctx = new

91、60;GuestBookDataContext("server=xxx;database=GuestBook;uid=xxx;pwd=xxx");              protected void Page_Load(object sender, EventArgs e)            

92、0; if (!IsPostBack)                      SetBind();                   private void SetBind()  &

93、#160;           rpt_Message.DataSource = from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb;         rpt_Message.DataBind();          protected void rpt_Message_ItemCommand(object source, RepeaterCommandEventArgs e)              if (e.Com

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論