XP如何安装visual .net studio 2003

XP如何安装visual .net studio 2003,第1张

先安装虚拟光驱 1 添加IIS服务器(添加组件)2安装 VSWCUD1(不要自动运行,右键打开,setupexe 再点“否”)3安装VSENARD1 (安装一半提示插入“光盘2 VSENARD2 ”)4完成 悬赏分:20 拿来谢谢

合同变更需要在双方都同意的情况下,而且不可实质性变更合同内容。
首先你说的第二点利息这个问题招法实施条例虽然已经实施但是现在(只是现在)确实很少有招标代理公司就这个问题会按照实施条例来做,而且应该也不会有投标单位来退保证金的时候强烈的要求退利息。没准以后招标公司会主要给哦。
还有你说的第一个问题无论是你说的变更合同价格还是签订合同的时间是经常会发生在招投标活动中的,按照法律这是不符合法律规定的但是既然大家都这样做了也就那样了。做什么事都不要太死板。这是我自己的一些看法。
还有招标投标法和招标投标法实施条例都主要是工程,而政府采购法,18号令则主要是货物和服务,如果你的工作是有关招标或采购的,那么你首先研究法律,法规是没错的,但是除了法律还要多看,多听,多思考其他人、同事的做法。祝你工作顺利!

1数据存储过程:简单滴说,存储过程就是存储在数据库中的一个程序。

2数据库存储过程作用:

第一:存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快

第二:存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。  

第三:存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。  

第四:存储过程主要是在服务器上运行,减少对客户机的压力。

第五:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。

第六:存储过程可以在单个存储过程中执行一系列   SQL   语句。

第七:存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

此外,如果多条SQL语句执行过程中,过程环节返回了数据作为后面环节的输入数据,如果直接通过

SQL语句执行,势必导致大量的数据通过网络返回到客户机,并在客户机运算;如果封装在存储过程中,

则将运算放在服务器进行,不但减少了客户机的压力,同时也减少了网络流量,提高了执行的效率。

3mysql存储过程:

MySQL5存储过程,用得人好像不多。按照数据库设计原理来讲,存储过程是在db server上预编译的,所以查询速度会比较起纯SQL语句快很多。可能是现在流行OO,导至存储过程使用的余地大打折扣。但如果从效果上来讲,用存储过程来实现业务规则所带得DB SERVER压力,比用JAVA类实现业务规则所带来的WEB SERVER压力要小。当然存储过程也不应滥用,象普通的insert、update之类的语句就不需要使用存储过程了。
MySQL创建procudure的语法与sql server/Oracle差别较大。
例1:传入参数的procedure

create procedure usp_test(param varchar(20)
  select from talbeName where column=param  

例2:更新表的procedure

create procedure usp_test2 (t varchar(20))
  begin
    set xname = 'test';
    update table set column = xname where column1=t;
 end
 


    MySQL创建存储过程时不带as,而且()不能省略,即便是没有传入参数。这一点象sql server或是oracle那样直观,而且声明变量时直接用declare,不用加的@或@@(in out变量除外)。还有一点是很怪的语法,如果是以“select”为开头的存储过程,是不能加"begin end"的。"begin end"表示多条SQL语句的复合体。
   当然,事实上几乎没有哪款数据库是完全符合SQL3标准的,多少都含有自己的一些成份里面,这也造成使用存储过程会使程序的可移性降低。
   调用procedure
   MySQL使用call关键字。例:call usp_test('test');而不是execute,同样()是不能省略的。
  创建完procedure后,再看看java是如何调用procedure的。
    Connection conn = null;

    CallableStatement cstmt = null;
    ResultSet rs = null;
    try{
        conn = DbConngetDbConn();//get pool conn
        CallableStatement cstmt = connprepareCall("{call usp_test()}");
            callsetString(1, "test");
            rs = callexecuteQuery();
            while(rsnext()){
                String te = rsgetString(1);
                Systemoutprintln("te:"+te);
            }
        }catch(Exception e){
            Systemoutprintln("e: "+e);
        }finally{
            try{
                rsclose();
                cstmtclose();
                connclose();
            }catch(Exception ex){
                Systemoutprintln("ex:"+ex);
            }
        }

这里使用的是"{call usp_test()}"来调用存储过程。同时也可以编程传入参数,进行查询。

一、使用存储过程的必要性
我们知道EF通过元数据,即概念模型(Concept Model)、存储模型(Storage Model)和概念/存储映射(C/S Mapping),和状态追踪(State Tracking)机制可以为基于模型的 *** 作自动生成SQL。对于一些简单的项目开发,这是非常理想的,因为他们完全可以不用关注数据存储层面的东西,你可以采用一些完全不具有数据库知识的开发者。但是理想总归是理想,对于企业级开发来说,我们需要的是对数据库层面数据的 *** 作有自己的控制。在这方面,我们可以随便举两个典型的场景:
逻辑删除:对于一些重要的数据,我们可能需要让它们永久保存。当我们试图“删除”这些数据的时候,我们并不是将它们从数据表中移除(物理删除),而是为这条记录作一个已经被删除的标记;
并发处理:为了解决相同的数据在获取和提交这段时间内被另一个用户修改或者删除,我们往往SQL层面增加并发控制的逻辑。比较典型的做法是在每一个表中添加一个VersionNo这样的字段,你可以采用TimeStamp,也可以直接采用INT或者GUID。在执行Update或者Delete的SQL中判断之前获取的VersionNo是否和当前的一致。
让解决这些问题,就不能使用EF为我们自动生成的SQL,只有通过使用我们自定义的存储过程。
二、实现存储过程自动匹配的必要条件
本篇文章提供的存储过程自动映射机制是通过代码生成的方式完成的。说白了,就是读取原来的edmx模型文件,通过分析在存储模型中使用的数据表,导入基于该表的CUD存储过程;然后再概念/存储映射节点中添加实体和这些存储过程的映射关系。那实现这样的代码生成,需要具有如下三个固定的映射规则。
数据表名-存储过程名:这个映射关系帮助我们通过存储模型中的实体名找到对应CUD三个存储过程(如果实体是数据表);
数据表列名-存储过程参数名:当存储过程被执行的时候,通过这个映射让概念模型实体某个属性值作为对应的参数;
存储过程参数名-版本:当进行参数赋值的时候,通过这个映射决定是使用Original或者Current版本。
在实际的开发过程中,这样的标准存储过程一般都是通过代码生成器生成的(在我的文章《创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]》中有过相应的实现),它们具有这样的映射关系。
基于这三种映射关系,我定义了如下一个名为IProcedureNameConverter的接口。其中OperationKind是我自定义的一个表示CUD *** 作类型的枚举。
1: public interface IProcedureNameConverter
2: {
3: string GetProcedureName(string tableName, OperationKind operationKind);
4: string GetColumnName(string parameterName);
5: DataRowVersion GetVersion(string parameterName);
6: }
7:
8: public enum OperationKind
9: {
10: Insert,
11: Update,
12: Delete
13: }
按照我们当前项目采用的命名规范,我定义了如下一个默认的DefaultNameConverter。它体现的是这样的映射关系,比如有个数据表明为T_USER(大写,单词之间用“_”隔开,并以T_为前缀),它对应的CUD存储过程名分别为:P_USER_I、P_USER_U和P_USER_D(大写,以代表存储过程的P_为前缀,后缀_I/U/D表示CUD *** 作类型,中间为去除前缀的表名)。如果列名为USER_ID,参数名为p_user_id(小写,加p_前缀)。如果需要用Original值为参数赋值,需要将p_前缀改成o_前缀(o_user_id)。
1: public class DefaultNameConverter: IProcedureNameConverter
2: {
3: public string GetProcedureName(string tableName, OperationKind operationKind)
4: {
5: switch (operationKind)
6: {
7: case OperationKindInsert:
8: return stringFormat("P_{0}_I", tableNameSubstring(2));
9: case OperationKindUpdate:
10: return stringFormat("P_{0}_U", tableNameSubstring(2));
11: default:
12: return stringFormat("P_{0}_D", tableNameSubstring(2));
13: }
14: }
15:
16: public string GetColumnName(string parameterName)
17: {
18: return parameterNameSubstring(2)ToUpper();
19: }
20:
21: public DataRowVersion GetVersion(string parameterName)
22: {
23: if(parameterNameStartsWith("o"))
24: {
25: return DataRowVersionOriginal;
26: }
27: else
28: {
29: return DataRowVersionCurrent;
30: }
31: }
32: }
三、通过T4生成新的edmx模型
我们采用的基于T4的代码生成,了解EF的应该对T4不会感到陌生了。如果对代码生成感兴趣的话,可以看看我的文章《与VS集成的若干种代码生成解决方案[博文汇总(共8篇)]》。这里利用借助于T4 ToolBox这个开源工具箱,并采用SQL Server SMO获取存储过程信息。所有涉及到的文本转化都实现在如下一个ProcedureMappingTemplate类型中,由于内容较多,具体实现就忽略了,有兴趣的朋友可能下载源代码。ProcedureMappingTemplate具有两个构造函数的参数分别表示:源edmx文件,服务器和数据库名,存储过程的Schema(默认为dbo)和具体的ProcedureNameConverter(默认为DefaultNameConverter)。
1: public class ProcedureMappingTemplate: Template
2: {
3: public XmlDocument SourceModel { get; private set; }
4: public IProcedureNameConverter ProcedureNameConverter { get; private set; }
5: public Database Database { get; private set; }
6: public string Schema { get; private set; }
7:
8: public ProcedureMappingTemplate(string sourceModelFile, string serverName, string databaseName);
9: public ProcedureMappingTemplate(string sourceModelFile, string serverName, string databaseName,
10: IProcedureNameConverter procedureNameConverter, string schema);
11:
12: protected virtual XElement GenerateStorageModelNode();
13: protected virtual XElement GenerateMappingNode();
14: public override string TransformText()
15: {
16: XElement newStorageModelNode = thisGenerateStorageModelNode();
17: XElement newMappingNode = thisGenerateMappingNode();
18:
19: XmlNode storageModelNode = thisSourceModelGetElementsByTagName("edmx:StorageModels")[0];
20: storageModelNodeInnerXml = newStorageModelNodeElements()ToArray()[0]ToString();
21:
22: XmlNode mappingNode = thisSourceModelGetElementsByTagName("edmx:Mappings")[0];
23: mappingNodeInnerXml = newMappingNodeElements()ToArray()[0]ToString();
24:
25: thisWriteLine("<xml version=\"10\" encoding=\"utf-8\">");
26: thisWrite(thisSourceModelDocumentElementOuterXmlReplace("xmlns=\"\"",""));
27: return GenerationEnvironmentToString();
28: }
29: }
在使用过程中,你只需要在tt模板中创建这个ProcedureMappingTemplate对象,调用Render方法即可。
1: <#@ template debug="true" hostSpecific="true" #>
2: <#@ output extension="edmx" #>
3: <#@ assembly name="MicrosoftSqlServerConnectionInfo" #>
4: <#@ assembly name="MicrosoftSqlServerSmo" #>
5: <#@ assembly name="MicrosoftSqlServerManagementSdkSfc" #>
6: <#@ assembly name="$(TargetDir)ArtechProcedureMappingdll" #>
7: <#@ import namespace="ArtechProcedureMapping" #>
8: <#@ include file="T4Toolboxtt" #>
9: <#
10: new ProcedureMappingTemplate(thisHostResolvePath("UserModeledmx"),"","EFExtensions")Render();
11: #>
四、看看生成出来的emdx
通过上面创建的TT模板(你指定的数据库中一定要存在具有相应映射关系的存储过程),新的edmx模型文件会作为该tt文件的依赖文件被生成出来。而这个新生成的edmx具有存储过程映射信息。具体来说,下面是原始的edmx文件(只保留元数据节点)。
1: <xml version="10" encoding="utf-8">
2: <edmx:Edmx Version="20" xmlns:edmx=">

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13449743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-08
下一篇 2023-08-08

发表评论

登录后才能评论

评论列表(0条)

保存