/// <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. PAT 1079. 延迟的回文数

    PAT 1079. 延迟的回文数 给定一个 k+1 位的正整数 N,写成 ak...a1a0 的形式,其中对所有 i 有 0 <= ai < 10 且 ak > 0.N 被称为一个回 ...

  2. [luoguP2896] [USACO08FEB]一起吃饭Eating Together(DP)

    传送门 由于 Di 只有 3 种情况,那么就很简单了 f[i][j][0] 表示前 i 个,且第 i 个变成 j 的 递增序列最小修改次数 f[i][j][1] 表示前 i 个,且第 i 个变成 j ...

  3. validate针对checkbox、radio、select标签的验证

    jQuery.validate 是jquery的一个插件,用来辅助开发者在客户端方便快捷的实现表单验证,最终达到提高用户体验的目的. 示例代码 <form id="formLogin& ...

  4. jQuery对象是怎么创建的

    一.jQuery源码 在jQuery中,$是jQuery的别名,执行“$()”就是执行“jQuery()”,执行“$()”返回的是一个jQuery对象,在源码中,它是这样定义的: ... var jQ ...

  5. zoj——3624 Count Path Pair

    Count Path Pair Time Limit: 3 Seconds      Memory Limit: 65536 KB You are given four positive intege ...

  6. ZOJ——3609 Modular Inverse

    Modular Inverse Time Limit: 2 Seconds      Memory Limit: 65536 KB The modular modular multiplicative ...

  7. JavaScript解析顺序和变量作用域

    JavaScript基础之变量作用域. 一. 1.全局变量:全局变量的意思就是,在代码的不论什么地方都能够訪问到.注意:未定义 直接赋值的变量拥有全局属性. 2.局部变量:局部变量的意思就是,变量的作 ...

  8. 模式匹配-BF算法

    /***字符串匹配算法***/ #include<cstring> #include<iostream> using namespace std; #define OK 1 # ...

  9. 数学之路-python计算实战(1)-ubuntu安装pypy

    Get the source code. The following packages contain the source at the same revision as the above bin ...

  10. HDU 5289 Assignment (二分+区间最值)

    [题目链接]click here~~ [题目大意]: 给出一个数列,问当中存在多少连续子序列,子序列的最大值-最小值<k [思路]:枚举数列左端点.然后二分枚举右端点,用ST算法求区间最值.(或 ...