PetaPoco更新记录方法

/// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="tableName">The name of the table to update</param>
/// <param name="primaryKeyName">The name of the primary key column of the table</param>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="primaryKeyValue">The primary key of the record to be updated</param>
/// <returns>The number of affected records</returns>
public int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue)
{
if (string.IsNullOrEmpty(tableName))
throw new ArgumentNullException("tableName"); if (string.IsNullOrEmpty(primaryKeyName))
throw new ArgumentNullException("primaryKeyName"); if (poco == null)
throw new ArgumentNullException("poco"); return ExecuteUpdate(tableName, primaryKeyName, poco, primaryKeyValue, null);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="tableName">The name of the table to update</param>
/// <param name="primaryKeyName">The name of the primary key column of the table</param>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="primaryKeyValue">The primary key of the record to be updated</param>
/// <param name="columns">The column names of the columns to be updated, or null for all</param>
/// <returns>The number of affected rows</returns>
public int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue, IEnumerable<string> columns)
{
if (string.IsNullOrEmpty(tableName))
throw new ArgumentNullException("tableName"); if (string.IsNullOrEmpty(primaryKeyName))
throw new ArgumentNullException("primaryKeyName"); if (poco == null)
throw new ArgumentNullException("poco"); return ExecuteUpdate(tableName, primaryKeyName, poco, primaryKeyValue, columns);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="tableName">The name of the table to update</param>
/// <param name="primaryKeyName">The name of the primary key column of the table</param>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <returns>The number of affected rows</returns>
public int Update(string tableName, string primaryKeyName, object poco)
{
return Update(tableName, primaryKeyName, poco, null);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="tableName">The name of the table to update</param>
/// <param name="primaryKeyName">The name of the primary key column of the table</param>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="columns">The column names of the columns to be updated, or null for all</param>
/// <returns>The number of affected rows</returns>
public int Update(string tableName, string primaryKeyName, object poco, IEnumerable<string> columns)
{
if (string.IsNullOrEmpty(tableName))
throw new ArgumentNullException("tableName"); if (string.IsNullOrEmpty(primaryKeyName))
throw new ArgumentNullException("primaryKeyName"); if (poco == null)
throw new ArgumentNullException("poco"); return ExecuteUpdate(tableName, primaryKeyName, poco, null, columns);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="columns">The column names of the columns to be updated, or null for all</param>
/// <returns>The number of affected rows</returns>
public int Update(object poco, IEnumerable<string> columns)
{
return Update(poco, null, columns);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <returns>The number of affected rows</returns>
public int Update(object poco)
{
return Update(poco, null, null);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="primaryKeyValue">The primary key of the record to be updated</param>
/// <returns>The number of affected rows</returns>
public int Update(object poco, object primaryKeyValue)
{
return Update(poco, primaryKeyValue, null);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <param name="poco">The POCO object that specifies the column values to be updated</param>
/// <param name="primaryKeyValue">The primary key of the record to be updated</param>
/// <param name="columns">The column names of the columns to be updated, or null for all</param>
/// <returns>The number of affected rows</returns>
public int Update(object poco, object primaryKeyValue, IEnumerable<string> columns)
{
if (poco == null)
throw new ArgumentNullException("poco"); var pd = PocoData.ForType(poco.GetType(), _defaultMapper);
return ExecuteUpdate(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco, primaryKeyValue, columns);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <typeparam name="T">The POCO class who's attributes specify the name of the table to update</typeparam>
/// <param name="sql">The SQL update and condition clause (ie: everything after "UPDATE tablename"</param>
/// <param name="args">Arguments to any embedded parameters in the SQL</param>
/// <returns>The number of affected rows</returns>
public int Update<T>(string sql, params object[] args)
{
if (string.IsNullOrEmpty(sql))
throw new ArgumentNullException("sql"); var pd = PocoData.ForType(typeof(T), _defaultMapper);
return Execute(string.Format("UPDATE {0} {1}", _provider.EscapeTableName(pd.TableInfo.TableName), sql), args);
} /// <summary>
/// Performs an SQL update
/// </summary>
/// <typeparam name="T">The POCO class who's attributes specify the name of the table to update</typeparam>
/// <param name="sql">
/// An SQL builder object representing the SQL update and condition clause (ie: everything after "UPDATE
/// tablename"
/// </param>
/// <returns>The number of affected rows</returns>
public int Update<T>(Sql sql)
{
if (sql == null)
throw new ArgumentNullException("sql"); var pd = PocoData.ForType(typeof(T), _defaultMapper);
return Execute(new Sql(string.Format("UPDATE {0}", _provider.EscapeTableName(pd.TableInfo.TableName))).Append(sql));
} private int ExecuteUpdate(string tableName, string primaryKeyName, object poco, object primaryKeyValue, IEnumerable<string> columns)
{
try
{
OpenSharedConnection();
try
{
using (var cmd = CreateCommand(_sharedConnection, ""))
{
var sb = new StringBuilder();
var index = ;
var pd = PocoData.ForObject(poco, primaryKeyName, _defaultMapper);
if (columns == null)
{
foreach (var i in pd.Columns)
{
// Don't update the primary key, but grab the value if we don't have it
if (string.Compare(i.Key, primaryKeyName, true) == )
{
if (primaryKeyValue == null)
primaryKeyValue = i.Value.GetValue(poco);
continue;
} // Dont update result only columns
if (i.Value.ResultColumn)
continue; // Build the sql
if (index > )
sb.Append(", ");
sb.AppendFormat("{0} = {1}{2}", _provider.EscapeSqlIdentifier(i.Key), _paramPrefix, index++); // Store the parameter in the command
AddParam(cmd, i.Value.GetValue(poco), i.Value.PropertyInfo);
}
}
else
{
foreach (var colname in columns)
{
var pc = pd.Columns[colname]; // Build the sql
if (index > )
sb.Append(", ");
sb.AppendFormat("{0} = {1}{2}", _provider.EscapeSqlIdentifier(colname), _paramPrefix, index++); // Store the parameter in the command
AddParam(cmd, pc.GetValue(poco), pc.PropertyInfo);
} // Grab primary key value
if (primaryKeyValue == null)
{
var pc = pd.Columns[primaryKeyName];
primaryKeyValue = pc.GetValue(poco);
}
} // Find the property info for the primary key
PropertyInfo pkpi = null;
if (primaryKeyName != null)
{
PocoColumn col;
pkpi = pd.Columns.TryGetValue(primaryKeyName, out col)
? col.PropertyInfo
: new { Id = primaryKeyValue }.GetType().GetProperties()[];
} cmd.CommandText = string.Format("UPDATE {0} SET {1} WHERE {2} = {3}{4}",
_provider.EscapeTableName(tableName), sb.ToString(), _provider.EscapeSqlIdentifier(primaryKeyName), _paramPrefix, index++);
AddParam(cmd, primaryKeyValue, pkpi); DoPreExecute(cmd); // Do it
var retv = cmd.ExecuteNonQuery();
OnExecutedCommand(cmd);
return retv;
}
}
finally
{
CloseSharedConnection();
}
}
catch (Exception x)
{
if (OnException(x))
throw;
return -;
}
}
PetaPoco更新记录方法的更多相关文章
- mysql防止重复插入记录方法总结
mysql防止重复插入记录方法总结 防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了. ...
- 如何更方便的查看Linux内核代码的更新记录【转】
转自:http://blog.csdn.net/lee244868149/article/details/44302819 Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新 ...
- Git 删除所有历史提交记录方法
Git 删除所有历史提交记录方法 切换分支 git checkout --orphan latest_branch 添加所有文件 git add -A 提交更改 git commit -am &quo ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
- MicroERP软件更新记录1.1
MicroERP软件更新记录 最新版本:1.1 1.增加固定资产检修.租赁.转移记录 2.增加产品质检单 3.增加零售单(收银台) 4.支持各种主流关系型数据库 5.完善了数据字典,如加入原材料材质. ...
- 更新记录后关闭子窗口并刷新父窗口的Javascript
有时我们需要在新打开的窗口里面编辑信息,等编辑完了,需要将当前窗口关闭并且刷新父窗口,以使修改生效,本文就是介绍用 javascript 来实现"更新记录后关闭子窗口并刷新父窗口" ...
- Atitit 记录方法调用参数上下文arguments
Atitit 记录方法调用参数上下文arguments 1.1. java java8 新的对象Parameter LocalVariableTable 本地变量表 MethodParamete ...
- Dynamics CRM2016 Web API之更新记录
本篇继续探索web api,介绍如何通过web api更新记录. 下面是一段简单的更新代码,更新了几个不同类型的字段,entity的赋值和前篇创建时候的一样的. var entity = {}; en ...
- Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式
CRM中通过Odata方式去创建或者更新记录时,各种类型的字段的赋值方式各不相同,这里转载一篇博文很详细的列出了各类型字段赋值方式,以供后期如有遗忘再次查询使用. http://luoyong0201 ...
随机推荐
- Java集合的小抄 Java初学者必备
在尽可能短的篇幅里,将所有集合与并发集合的特征,实现方式,性能捋一遍.适合所有”精通Java”其实还不那么自信的人阅读. 不断更新中,请尽量访问博客原文. List ArrayList 以数组实现.节 ...
- 射频识别技术漫谈(6)——通讯协议概述【worldsing笔记】
通讯协议是通讯的双方或多方在交流时遵守的规矩,包括谁先发起通讯,先交流什么,后交流什么,一方如何问,另一方如何答等.在这里通迅的双方指的是读写器和卡片. 首先是谁先发起通讯,很显然有两种,读写器先发言 ...
- 射频识别技术漫谈(3)——能量、调制【worldsing 笔记】
无源和免接触是非接触式IC卡相对于接触式IC卡的两大特点.无源是指卡片上没有电源,免接触是指对卡片的读写操作不必和读写器接触.非接触式智能卡也是IC卡,而卡上的IC即集成电路工作时肯定是需要电源的,卡 ...
- 压缩UI深度的代码实现
记录一下,或许同样使用深度的NGUI以后会用到. 目前的项目的UI是用Stage3D实现的,采用了类似NGUI填写深度来确定覆盖关系,但同时可以使用的深度是有一个固定范围的,导致的问题是如果UI过多深 ...
- ThinkPHP CURD方法盘点:page方法
page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法. 用法 我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例 ...
- js Uncaught SyntaxError: Unexpected token错误
今天遇到js报错Uncaught SyntaxError: Unexpected token 不知道是什么原因,并且js还会继续往下执行. 经过排查竟然是在保存行的上面有个if少一个大括号,真是坑爹啊 ...
- JS 实现2+2=5的代码 实现原理解析
当我在http://segmentfault.com/q/1010000000531302 看到的时候 先是一惊. 这是代码 g = function () { H = 3 return H ...
- java 引用类型及作用
0. 引言 Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference , 这 4 种 ...
- android学习日记21--消息提示之Toast和Notification
1.Toast Toast译为土司,类似切片面包,用于弹出比较快速的及时提示信息.当Toast被显示时,虽然它悬浮应用程序最上方,但是并未获得焦点.它的设计就是为了提示有用的信息,而不打扰用户其他操作 ...
- android137 360 双击三击事件
package com.itheima52.doubleclick; import android.app.Activity; import android.os.Bundle; import and ...