[TOC]
分析哪些sql 是查询sql
* 不是存储过程
* 没有update, insert , exec, 里面没有proc(存储过程)
* 有select
分析上一条语句是否不是更新插入, 如果是则从读写库中查询
主要是为了方式更新后马上查询的情况,防止数据库主从同步的延迟
还是上代码比较实惠
private static string GetReadConnectstring(string sql, string connectstring)
{
var isquery = IsSelect(sql);
var result = connectstring;
if (isquery && !preIsNotSelect)
{
result = SqlConnectionString.GetReadonlyConnectionstring(connectstring);
}
preIsNotSelect = !isquery;
return result;
}
[ThreadStatic]
private static bool preIsNotSelect = false; // 上一条执行语句是否是select
private static bool IsSelect(string sql)
{
var sqlTmp = sql.ToLower();
if (sqlTmp.IndexOf("insert") > -1 || sqlTmp.IndexOf("update") > -1 || sqlTmp.IndexOf("exec") > -1 || sqlTmp.IndexOf("proc") > -1)
{
return false;
}
return sqlTmp.IndexOf("select") > -1;
}