/// <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. Vue2.0 Props双向绑定报错简易处理办法

    在写项目的时候遇到了一个报错问题,虽然功能是正常运行,chrome的提示是:[Vue warn]: Avoid mutating a prop directly since the value wil ...

  2. 威纶通 与 信捷XC\XD系列PLC 通讯

    第一次使用信捷XD系列PLC正式做个项目,用的触摸屏为威纶通的 MT6071iP (注意:下面内容同样适用于 信捷XC系列PLC ,除信捷XC与XD系列编程软件不一样,其余接线设置实测均一样 ) 目前 ...

  3. PID控制温度

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

  4. BZOJ 3277 串 & BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析、启发式合并、线段树合并、主席树)

    标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...

  5. hadoop full cluster 改为伪分布

    https://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Di ...

  6. vue.js 利用组件之间通讯,写一个弹出框例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Javascript网址跳转方法

    第一种: window.location.href="http://www.baidu.com"; 第二种: window.navigate("http://www.ba ...

  8. Ubuntu下非常规方法安装绿色软件(压缩包)

    继上一篇http://www.cnblogs.com/EasonJim/p/7117567.html文章中说的常规方式安装的软件,都会自动在命令行及Dash Home中体现. 但是如果是使用压缩包进行 ...

  9. Servlet通过JavaBean传值到JSP页面

    主要通过Attribute进行传递,主要代码如下: 赋值,并定义跳转的页面: request.setAttribute("user", user); request.getRequ ...

  10. 《textanalytics》课程简单总结(1):两种word relations——Paradigmatic vs. Syntagmatic

    coursera上的公开课<https://www.coursera.org/course/textanalytics>系列,讲的很不错哦. 1.两种关系:Paradigmatic vs. ...