金蝶DBUtils的用法

Execute方法用于不需要返回数据的执行语句,如DDL、UPDATE、DELETE语句。返回值为影响的行数。 Execute方法每次仅执行一条语句,对SQLServer支持多条语句一起执行,因此多条语句拼在一起执行没有问题,但Oracle下执行会报错。 如果需要执行多条语句,请调用批量执行方法:ExecuteBatch。 如果要执行SELECT语句,建议使用ExecuteReader方法。

执行DDL:

DBUtils.Execute(context, "CREATE TABLE T_TEMP(FID INT NOT NULL, FNAME VARCHAR(10) NULL ) ");

以下语句未使用参数化,会导致数据库硬解析影响性能。

foreach (FieldValue val in fieldValues)

{

    string sql = string.Format("UPDATE T_DEMO set FValue = {0} where FID = {1} ", val.Value, val.Id); //注意此处val.Value不应该拼接,应使用参数化

    DBUtils.Execute(Context, sql);

}

执行带参数的语句:

sql = "INSERT INTO t_temp(FId, FType, FKernelXml, FName, FDevType) VALUES (@FId, @FType, @FKernelXml, @FName, @FDevType)";

List<SqlParam> paramList = new List<SqlParam>();

paramList.Add(new SqlParam("@FId", KDDbType.AnsiString, formID)); //非unicode(varchar类型)

paramList.Add(new SqlParam("@FType", KDDbType.Int64, metadata.Type));

paramList.Add(new SqlParam("@FKernelXml", KDDbType.Xml, xml));

paramList.Add(new SqlParam("@FName", KDDbType.String, metadata.Name)); //unicode字符(nvarchar类型)

paramList.Add(new SqlParam("@FDevType", KDDbType.Int32, (int)metadata.DevType));

DBUtils.Execute(this.Context, sql, paramList);

file:///C:/Users/rd_weixy/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png    ExecuteDynamicObject

执行指定的SQL并返回默认的一批使用DynamicObject集合描述的数据。

注:该方法内部是调用ExecuteDataReader,如果不是必须返回DynamicObject类型,建议使用ExecuteDataReader更好。

下面例子将获取的DynamicObject对象填充到单据体中。

//在表单插件中,应调用服务接口来获取数据,不能直接访问App服务

DynamicObjectCollection dcObjs = DBServiceHelper.ExecuteDynamicObject(this.View.Context, sql, null, null, System.Data.CommandType.Text, param);

//获取单据体数据包

DynamicObjectCollection dyCollection = (DynamicObjectCollection)this.View.Model.DataObject[EitityKey];

dyCollection.Clear();

DynamicObject dyObj;

foreach (var obj in dcObjs)

{

    dyObj = (DynamicObject)dyCollection.DynamicCollectionItemPropertyType.CreateInstance();

    dyObj["FDataCenterId"] = obj["FDataCenterId"];

    dyObj["FDCNumber"] = obj["FNumber"];

    dyObj["FDCName"] = obj["FName"];

    if (!string.IsNullOrWhiteSpace(_currentDataCenterId) && dyObj["FDataCenterId"].Equals(_currentDataCenterId))

    {

        dyObj["FStatus"] = Kingdee.BOS.Resource.ResManager.LoadKDString("启用", "002014030004624", Kingdee.BOS.Resource.SubSystemType.BOS);

        _isEnable = true;

    }

    else

    {

        dyObj["FStatus"] = "";

    }

    dyCollection.Add(dyObj);

}

服务接口使用的DynamicObject类型时,用ExecuteDynamicObject方法取数更方便,不需要自己转换。

string sql = @"select FUserID, FName, FFORBIDSTATUS FROM t_sec_user ";

DynamicObjectCollection charts = DBUtils.ExecuteDynamicObject(ctx, sql);

...

ISaveService saveService = App.ServiceHelper.GetService<ISaveService>();

saveService.Save(ctx, charts.ToArray<DynamicObject>());

以下例子ExecuteDyna

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值