心血来潮有想改进下工作效率,在代码开发过程中同事经常问这个错误是哪里触发的,这不是我写的我也只能一个一个调试定位到是哪个存储过程,于是想到了我之前的存储过程显示源码的玩意,又进行了改进,直接搜索存储过程内容。
切换到要搜索的数据库
SELECT top 30 OBJECT_NAME(sm.object_id) AS ProcedureName,
OBJECT_DEFINITION(sm.object_id) AS ProcedureDefinition,*
FROM sys.sql_modules AS sm
WHERE OBJECT_DEFINITION(sm.object_id) LIKE '%搜索的关键词%'
不过搜索后是一行显示,显然不行的,还需要开发一个工具,让他能完整显示每行,方便执行测试
于是整了个web版本
但是还是感觉不得劲,想开发zure data studio的扩展。
,但是开发思路是不知道怎么在存储过程的右键菜单插入,于是在azure data studio的扩展中进行搜索 search
原来有人做了类似的工具,支持缓存搜索和 热连接接搜索
不过操作交互不太舒服,是快捷键弹出对话框,选中了一个结果其他结果就看不到了,还不如我网页版的方便。
另外此插件的功能介绍:
缓存模式建议在打算改代码的模式不要使用,否则可能导致生产事故。
快捷键ctrl+t是缓存模式
ctrl+shift+t 无缓存模式
https://github.com/MikhailProfile/SearchEverywhere/issues
我的web版本实现逻辑也是很简单,因为用的 web core api,不打算套view,直接字符串拼接
private static string FormatMultiResultAsHtml2(JArray arrs)
{
// 替换回车和换行符
//sql = sql.Replace("\r", "").Replace("\n", "");
// 构造 HTML 表格
string html = "";
for (int a = 0; a < arrs.Count; a++)
{
string title = arrs[a]["title"] +"";
string contents = arrs[a]["content"]+"";
int lineNum = 1;
string linetag = "结果" + (a + 1);
html += @"
<div class=""result""
<h3> " +title+"|"+ HttpUtility.HtmlEncode(linetag) + @"</h3>
<p onclick=""toggleDetails(this)"">展开/收缩</p>
<div class=""result-details"">
<code> ";
html += contents.Replace("\n", "<br>");
//html += HttpUtility.HtmlEncode(contents.Replace("\n", "<br>"));
html += @"</code>
</div>
</div>";
}
string html1 = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
<meta charset=""UTF-8"">
<meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
<style>
.results-container {
display: flex;
flex-wrap: wrap;
}
.result {
flex: 0 0 98%;
margin: 2px;
padding: 10px;
border: 1px solid #ccc;
cursor: pointer;
}
.result-details {
display: none;
}
</style>
</head>
<body>
<div class=""results-container"">
" + html + @"
</div>
<script>
function toggleDetails(element) {
element = element.parentNode;
var details = element.querySelector('.result-details');
if (details.style.display === 'none' || details.style.display === '') {
details.style.display = 'block';
} else {
details.style.display = 'none';
}
}
</script>
</body>
</html>
";
return html1;
}
然后
html = FormatMultiResultAsHtml2(ARR);
html=html.Replace(content, "<font color='red'><b>" + content + "</b></font>");
}
// 返回 HTML 响应
return Content(html, "text/html", Encoding.UTF8);
切换数据库问题,这个我尝试过似乎不能指定数据库只能直接切换数据库源了。
传递之前的连接字符串,然后进行修改设置回去。
string dbname = JSONUtil.getStringValue(obj, "dbname", "").returnvalue;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConn);
builder.InitialCatalog = dbname;
strConn = builder.ToString();
网友评论