/// <summary>
/// 执行update, insert,delete 语句, 不返回结果集,(类型化参数)
/// </summary>
/// <param name="connString">连接字符串</param>
/// <param name="sql">待执行的sql语句</param>
/// <param name="errMsg">如果成功执行,返回受影响的行数, 如果执行失败, 返回错误信息</param>
/// <param name="paras">传递给查询的参数</param>
/// <returns>成功执行返回true, 否则返回false</returns>
public static bool ExecSql(string connString, string sql, out string errMsg, params object[] paras)
{
return DB.ExecSql(connString, DB.GetParametricSql(sql, paras), out errMsg);
}
private static string GetParametricSql(string sql, object[] paras)
{
sql = sql.Replace("'", "''");
sql = "EXEC sp_executesql N'" + sql + "'" + DB.ParseSqlArgument(paras);
return sql;
}
/// <summary>
/// 参数化ExecSql 函数调用的子函数, 它把对象参数转换成字符串
/// </summary>
/// <param name="paras"></param>
/// <returns></returns>
private static string ParseSqlArgument(object[] paras)
{
if (paras == null || paras.Length < )
{
return "";
}
string text = ",N'";
string text2 = ",";
int num = ;
for (int i = ; i < paras.Length; i++)
{
object obj;
if (paras[i] is Tuple<int, object>)
{
num = (paras[i] as Tuple<int, object>).Item1;
obj = (paras[i] as Tuple<int, object>).Item2;
}
else
{
obj = paras[i];
}
string text3 = "@p" + num.ToString();
num++;
if (obj == null)
{
throw new Exception("Null argument is not allowed.");
}
if (obj is string)
{
string text4 = obj as string;
text4 = text4.Replace('\'', ''');
object obj2 = text;
text = string.Concat(new object[]
{
obj2,
text3,
" nvarchar(",
(text4.Length > ) ? text4.Length : ,
"),"
});
string text5 = text2;
text2 = string.Concat(new string[]
{
text5,
text3,
"='",
text4,
"',"
});
}
else if (obj is int)
{
int num2 = (int)obj;
text = text + text3 + " int,";
string text6 = text2;
text2 = string.Concat(new string[]
{
text6,
text3,
"=",
num2.ToString(),
","
});
}
else if (obj is float)
{
float num3 = (float)obj;
text = text + text3 + " float,";
string text7 = text2;
text2 = string.Concat(new string[]
{
text7,
text3,
"=",
num3.ToString(),
","
});
}
else if (obj is double)
{
double num4 = (double)obj;
text = text + text3 + " real,";
string text8 = text2;
text2 = string.Concat(new string[]
{
text8,
text3,
"=",
num4.ToString(),
","
});
}
else if (obj is decimal)
{
decimal num5 = (decimal)obj;
string text9 = text;
text = string.Concat(new string[]
{
text9,
text3,
" decimal(18,",
StringTool.GetSectionValue(num5.ToString(), ".", ).Length.ToString(),
"),"
});
string text10 = text2;
text2 = string.Concat(new string[]
{
text10,
text3,
"=",
num5.ToString(),
","
});
}
else if (obj is DateTime)
{
DateTime dateTime = (DateTime)obj;
text = text + text3 + " datetime,";
string text11 = text2;
text2 = string.Concat(new string[]
{
text11,
text3,
"='",
dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
"',"
});
}
else
{
if (!(obj is char))
{
throw new Exception("The data type is not supported currently,please notify the author of this function this error.");
}
char c = (char)obj;
text = text + text3 + " char(1),";
string text12 = text2;
text2 = string.Concat(new string[]
{
text12,
text3,
"='",
c.ToString(),
"',"
});
}
}
text = text.Substring(, text.Length - ) + "'";
text2 = text2.Substring(, text2.Length - );
return text + text2;
}
/// <summary>
/// 取得一个由分隔符分隔的字符串的分段信息. 如果参数不合法, 将取最接近的值返回,而不返回错误信息
/// </summary>
/// <param name="input"></param>
/// <param name="sep"></param>
/// <param name="section">从0开始编号的段号</param>
/// <returns></returns>
public static string GetSectionValue(string input, string sep, int section)
{
string[] array = StringTool.Split(input, sep);
if (section >= array.Length)
{
return "";
}
return array[section];
}
/// <summary>
/// 根据分割符将字符串割成数组,如果参数非法,返回一个长度为1,首元素为母串的数组,
/// 如果母串为null, 则首元素为空串, 不会返回null值.
/// </summary>
/// <param name="input">母串</param>
/// <param name="sep">分割符</param>
/// <returns>返回分割后的数组</returns>
public static string[] Split(string input, string sep)
{
if (input == null || sep == null || input == "" || sep == "" || input.IndexOf(sep) < )
{
return new string[]
{
input ?? ""
};
}
return input.Split(new string[]
{
sep
}, StringSplitOptions.None);
}

执行update, insert,delete 语句, 不返回结果集,(类型化参数)的更多相关文章

  1. spring data jpa执行update和delete语句时报错处理

    之前项目中使用spring data jpa时,遇到删除记录的需求时,主要利用spring data中自带的delete()方法处理,最近在dao层使用delete sql语句时报错,代码如下: @Q ...

  2. sql insert、update、delete完以后返回主键ID

    以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查 ...

  3. SQL Server中UPDATE和DELETE语句结合INNER/LEFT/RIGHT/FULL JOIN的用法

    在SQL Server中,UPDATE和DELETE语句是可以结合INNER/LEFT/RIGHT/FULL JOIN来使用的. 我们首先在数据库中新建两张表: [T_A] CREATE TABLE ...

  4. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  5. (转)jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法

    本文转载自:http://hedyn.iteye.com/blog/856040 在JDBC中调用SQL Server中的存储过程时出现如下异常: com.microsoft.sqlserver.jd ...

  6. mybatis的select、insert、update、delete语句

    一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...

  7. ASP入门(二十)-INSERT、UPDATE、DELETE语句

    插入记录 INSERT INTO 语句 单条记录插入语法 INSERT INTO target [(field1[, field2[, ...]])] VALUES (value1[, value2[ ...

  8. 轻量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 语句

    *本文中所用类声明见上一篇博文<轻量ORM-SqlRepoEx (三)Select语句>中Customers类 一.增加记录 1.工厂一个实例仓储 var repository = Rep ...

  9. oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》

    /* * 多条记录连接成一条 * tableName 表名 * type 类型:可以是insert/update/select之一 */ create or replace function my_c ...

随机推荐

  1. springcloud(十一):熔断聚合监控Hystrix Turbine

    springcloud(十一):熔断聚合监控Hystrix Turbine

  2. 邓_ HTML+CSS·经常使用的设计方法

    :WPA;P:hejia,888?;S:Hejia666; https://github.com/qq1415551519 HTML+CSS·经常使用的设计方法: ================== ...

  3. java 反射运用

    一,获取私有的属性,方法,构造器(俗名:暴力反射) 现有一个类,属性,方法,构造器均为私有的,如何创建实例对象,更该属性值,调用方法? public class Student { private S ...

  4. pyhthon第一个小脚本——文件备份

    先说说这个脚本的作用:对指定路径的文件进行压缩备份到另一个指定的路径,并且压缩文件的文件名用当时的日期+时间命名. 先是对着<简明Python教程>上的代码敲的,一堆错误,书上给的是lin ...

  5. 魔法猪学院(codevs 1835)

    题目描述 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世 ...

  6. 【故障处理】初始化数据时报600错误kcbz_check_objd_typ_3

    http://blog.itpub.net/519536/viewspace-661905/

  7. 常见的HTTP状态码(HTTP Status Code)

    HTTP状态码 当使用浏览器访问一个网页时,浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览 ...

  8. eventlet

    项目中要模拟openstack的swift的多路write功能.初步设想是用python的eventlet来实现多线程.比如在write的时候要同时写入两个storage,就用eventlet生成2个 ...

  9. [Vue-rx] Switch to a Function which Creates Observables with Vue.js and Rxjs

    Wrapping the creation of an Observable inside of a Function allows you delay the creation of the Obs ...

  10. FFmpeg总结(三)AV系列结构体之AVCodecContext

    位置: 描写叙述:主要扩展API的结构体 New fields can be added to the end with minor version bumps. Removal, reorderin ...