在工作中,有很多项目已上线后,很多项目的数据库服务器都不会对外开放的,外网想直接访问客户数据库服务器时,可能会出现困难。

这时就需要一个可以查询,更新数据库操作的页面了;

本来用sql语句直接操作数据库数据是不好的,所以此页面工具只针对已经非常熟悉数据库结构的人来使用,因为可以执行更新/修改语句,请慎用。

目前没对这个页面做任何的访问限制,出于对数据的安全性考虑,强烈建议对本页面的访问做访问限制处理!

效果图:



在线体验:(个人站点域名审核还未通过,敬请关注

打包下载:http://download.csdn.net/detail/a497785609/7283839

源代码:

为了方便使用,所有代码都写在了一个apsx页面,便于携带,另存为一个aspx,放到您的站点访问即可。

  1. <%@ Page Language="C#" %>
  2.  
  3. <%@ Import Namespace="System" %>
  4. <%@ Import Namespace="System.Data" %>
  5. <%@ Import Namespace="System.Data.SqlClient" %>
  6. <%@ Import Namespace="System.Collections.Generic" %>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <script runat="server">
  9.  
  10. /// <summary>
  11. /// 【数据库连接字符串】
  12. /// 注意:在这里需与webconfig里的数据库连接字符串配置节一致;
  13. /// </summary>
  14. protected string Connection = ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString;
  15.  
  16. /// <summary>
  17. /// 所有数据表,前台js使用
  18. /// </summary>
  19. protected string DataTables { get; set; }
  20. /// <summary>
  21. /// 所有字段,前台js使用
  22. /// </summary>
  23. protected string Fields { get; set; }
  24.  
  25. /// <summary>
  26. /// 判断连接是否成功!
  27. /// </summary>
  28. /// <param name="con"> 链接字符串</param>
  29. /// <returns>true 表示链接成功,false表示连接失败</returns>
  30. public static string CheckConnection(string con)
  31. {
  32. string status = "";
  33. var conn = new SqlConnection(con);
  34. try
  35. {
  36. conn.Open();
  37. status = "true|";
  38. }
  39. catch (Exception ex)
  40. {
  41. status = "false|" + ex.Message;
  42. }
  43. finally
  44. {
  45. conn.Close();
  46. }
  47. return status;
  48. }
  49. protected void Page_Load(object sender, EventArgs e)
  50. {
  51. if (CheckConnection(Connection).ToLower().StartsWith("false"))
  52. {
  53. Response.Clear();
  54. Response.Write("<span style='color:red'>对不起,数据库链接失败.<br/><br/>请检查数据库链接:\"" + Connection + "\" 是否正确!</span>");
  55. Response.End();
  56. }
  57. else
  58. {
  59. //所有表
  60. if (Cache.Get("tables") == null)
  61. {
  62. List<string> tables = GetTableNames(Connection);
  63. DataTables = "[";
  64. foreach (string table in tables)
  65. {
  66. DataTables += "'" + table + "',";
  67. }
  68. DataTables = DataTables.TrimEnd(',');
  69. DataTables += "]";
  70. Cache.Insert("tables", DataTables);
  71. }
  72. else
  73. {
  74. DataTables = Cache.Get("tables").ToString();
  75. }
  76.  
  77. //所有字段
  78. if (Cache.Get("fields") == null)
  79. {
  80. DataTable fields = GetFileds(Connection);
  81. Fields = "[";
  82. foreach (DataRow row in fields.Rows)
  83. {
  84. Fields += "{tName:'" + row["表名"] + "',fName:'" + row["字段名"] + "'},";
  85. }
  86. Fields = Fields.TrimEnd(',');
  87. Fields += "]";
  88. Cache.Insert("fields", Fields);
  89. }
  90. else
  91. {
  92. Fields = Cache.Get("fields").ToString();
  93. }
  94.  
  95. if (!IsPostBack)
  96. {
  97. }
  98. }
  99. }
  100.  
  101. #region 查询
  102.  
  103. /// <summary>
  104. /// 需过滤掉的关键字
  105. /// </summary>
  106. public static string[] ForbidSqlKeyword = { "ALTER", "UPDATE", "DELETE", "DROP", "CREATE", "COMMIT" };
  107.  
  108. public static bool IsContainDangerWords(string sql)
  109. {
  110. bool haveForbidWord = false;
  111. sql = sql.ToLower().Replace("\r", " ").Replace("\n", " ");
  112. string[] sqlWordArr = sql.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
  113. foreach (string word in sqlWordArr)
  114. {
  115. foreach (string forbidWord in ForbidSqlKeyword)
  116. {
  117. if (String.Compare(forbidWord.Trim(), word.Trim(), StringComparison.OrdinalIgnoreCase) == 0)
  118. {
  119. haveForbidWord = true;
  120. break;
  121. }
  122. }
  123. }
  124. return haveForbidWord;
  125. }
  126.  
  127. /// <summary>
  128. /// 查询
  129. /// </summary>
  130. /// <param name="sender"></param>
  131. /// <param name="e"></param>
  132. private void BtnQueryClick(object sender, EventArgs e)
  133. {
  134. string sql = txtSql.Text.Trim();
  135. if (!IsContainDangerWords(sql))
  136. {
  137. DataTable data = ExcuteDataTable(sql, Connection);
  138. string html = GetHtmlTable(data);
  139. ltrResult.Text = html;
  140. }
  141. else
  142. {
  143. var dt = new DataTable();
  144. dt.Columns.Add("执行结果");
  145. DataRow row = dt.NewRow();
  146. row["执行结果"] = "<span class='fail'>查询语句中含有修改数据相关的关键字,操作已忽略</span>";
  147. dt.Rows.Add(row);
  148. string html = GetHtmlTable(dt);
  149. ltrResult.Text = html;
  150. }
  151. }
  152.  
  153. #endregion
  154.  
  155. #region 执行
  156.  
  157. /// <summary>
  158. /// 执行
  159. /// </summary>
  160. /// <param name="sender"></param>
  161. /// <param name="e"></param>
  162. private void BtnExcuteClick(object sender, EventArgs e)
  163. {
  164. var dt = new DataTable();
  165. string sql = txtSql.Text.Trim();
  166. try
  167. {
  168. if (Execute(sql, Connection))
  169. {
  170. dt.Columns.Add("执行结果");
  171. DataRow row = dt.NewRow();
  172. row["执行结果"] = "<span class='sucess'>执行成功</span>";
  173. dt.Rows.Add(row);
  174. }
  175. else
  176. {
  177. dt.Columns.Add("执行结果");
  178. DataRow row = dt.NewRow();
  179. row["执行结果"] = "<span class='fail'>执行失败</span>";
  180. dt.Rows.Add(row);
  181. }
  182. }
  183. catch (Exception ex)
  184. {
  185. dt.Columns.Add("异常信息");
  186. DataRow row = dt.NewRow();
  187. row["异常信息"] = ex.Message;
  188. dt.Rows.Add(row);
  189. }
  190. string html = GetHtmlTable(dt);
  191. ltrResult.Text = html;
  192. }
  193.  
  194. #endregion
  195.  
  196. #region 执行SQL语句返回DataTable
  197.  
  198. /// <summary>
  199. /// 执行SQL语句返回DataTable
  200. /// </summary>
  201. /// <param name="sql"></param>
  202. /// <param name="con"></param>
  203. /// <returns></returns>
  204. public static DataTable ExcuteDataTable(string sql, string con)
  205. {
  206. var cmd = new SqlCommand();
  207. var connection = new SqlConnection(con);
  208. try
  209. {
  210. using (connection)
  211. {
  212. cmd.Connection = connection;
  213. cmd.CommandText = sql;
  214. connection.Open();
  215. var da = new SqlDataAdapter(cmd);
  216. var ds = new DataSet();
  217. da.Fill(ds);
  218. return ds.Tables[0];
  219. }
  220. }
  221. catch (Exception ex)
  222. {
  223. var dt = new DataTable();
  224. dt.Columns.Add("异常信息");
  225. DataRow row = dt.NewRow();
  226. row["异常信息"] = ex.Message;
  227. dt.Rows.Add(row);
  228. return dt;
  229. }
  230. }
  231.  
  232. #endregion
  233.  
  234. #region DataSet转换为Html表格
  235.  
  236. /// <summary>
  237. /// 将DataSet转换为Html表格
  238. /// </summary>
  239. /// <param name="dt"></param>
  240. /// <returns></returns>
  241. public static string GetHtmlTable(DataTable dt)
  242. {
  243. var html = new StringBuilder();
  244. if (dt.Rows.Count == 0)
  245. {
  246. html.Append(
  247. @"<table class='data' cellspacing='1' cellpadding='0' border='1' style='width: 100%;'>
  248. <tbody>
  249. <tr class='tdbg' align='center' style='height: 100px;'>
  250. <td colspan='12'>
  251. 没有任何记录!
  252. </td>
  253. </tr>
  254. </tbody>
  255. </table>");
  256. }
  257. else
  258. {
  259. #region 表头行
  260.  
  261. html.Append(@"<table class='data' cellspacing='1' cellpadding='0' border='1' style='width: 100%;'>");
  262. html.Append(@"<tr class='gridtitle'>");
  263. foreach (DataColumn columns in dt.Columns)
  264. {
  265. string title = columns.ColumnName;
  266. html.Append(string.Format(@"<th scope='col' class='data_th'>{0}</th>", title));
  267. }
  268. html.Append(@"</tr>");
  269.  
  270. #endregion
  271.  
  272. #region 表数据行
  273.  
  274. foreach (DataRow row in dt.Rows)
  275. {
  276. html.Append(string.Format("<tr class='data_tr'>"));
  277. foreach (DataColumn columns in dt.Columns)
  278. {
  279. string cellValue = row[columns.ColumnName].ToString();
  280. html.Append(string.Format("<td class='data_td'>{0}</td>", cellValue));
  281. }
  282. html.Append(@"</tr>");
  283. }
  284.  
  285. #endregion
  286.  
  287. #region 表尾
  288.  
  289. html.Append(string.Format("<tr class='data_tr'>"));
  290. html.Append(string.Format("<td class='data_td' colspan='{0}'>合计:{1}条记录</td>", dt.Columns.Count,
  291. dt.Rows.Count));
  292. html.Append(@"</tr>");
  293. html.Append(@"</table>");
  294.  
  295. #endregion
  296. }
  297. return html.ToString();
  298. }
  299.  
  300. #endregion
  301.  
  302. #region 执行不带参数sql语句
  303.  
  304. /// <summary>
  305. /// 执行不带参数sql语句
  306. /// </summary>
  307. /// <param name="sql">增,删,改sql语句</param>
  308. /// <param name="con"></param>
  309. /// <returns>返回所影响的行数</returns>
  310. public static bool Execute(string sql, string con)
  311. {
  312. var cmd = new SqlCommand();
  313. var connection = new SqlConnection(con);
  314. try
  315. {
  316. using (connection)
  317. {
  318. cmd.Connection = connection;
  319. cmd.CommandText = sql;
  320. connection.Open();
  321. cmd.ExecuteNonQuery();
  322. return true;
  323. }
  324. }
  325. catch (Exception)
  326. {
  327. return false;
  328. }
  329. }
  330.  
  331. #endregion
  332.  
  333. /// <summary>
  334. /// 获取指定数据库中所有表的名字;
  335. /// </summary>
  336. /// <param name="con">连接字符串</param>
  337. /// <returns>所有表名的集合</returns>
  338. public static List<string> GetTableNames(string con)
  339. {
  340. var tableNames = new List<string>();
  341. try
  342. {
  343. var regex = new Regex(
  344. "(?i)(Initial Catalog|database)=(?<database>[^;]*);",
  345. RegexOptions.CultureInvariant
  346. | RegexOptions.Compiled
  347. );
  348. Group database = regex.Match(con).Groups["database"];
  349. string sql =
  350. "SELECT SYSOBJECTS.NAME FROM SYSOBJECTS,MASTER..SYSDATABASES T WHERE TYPE='U'AND T.NAME='" +
  351. database + "' ORDER BY SYSOBJECTS.NAME ASC";
  352. var cmd = new SqlCommand();
  353. var sqlcon = new SqlConnection(con);
  354. using (sqlcon)
  355. {
  356. cmd.Connection = sqlcon;
  357. cmd.CommandText = sql;
  358. sqlcon.Open();
  359. SqlDataReader sdr = cmd.ExecuteReader();
  360. while (sdr.Read())
  361. {
  362. tableNames.Add(sdr[0].ToString());
  363. }
  364. }
  365. }
  366. catch (Exception ex)
  367. {
  368. tableNames.Add("异常:" + ex.Message);
  369. }
  370. return tableNames;
  371. }
  372.  
  373. /// <summary>
  374. /// 取得所有字段
  375. /// </summary>
  376. /// <param name="connection"></param>
  377. /// <returns></returns>
  378. public DataTable GetFileds(string connection)
  379. {
  380. const string sql = @"
  381. SELECT 表名 = O.name,
  382. 字段名 = C.name
  383. FROM sys.columns C
  384. INNER JOIN sys.objects O
  385. ON C.[object_id] = O.[object_id]
  386. AND O.type = 'U'
  387. AND O.is_ms_shipped = 0
  388. INNER JOIN sys.types T
  389. ON C.user_type_id = T.user_type_id
  390. LEFT JOIN sys.default_constraints D
  391. ON C.[object_id] = D.parent_object_id
  392. AND C.column_id = D.parent_column_id
  393. AND C.default_object_id = D.[object_id]
  394. LEFT JOIN sys.extended_properties PFD
  395. ON PFD.class = 1
  396. AND C.[object_id] = PFD.major_id
  397. AND C.column_id = PFD.minor_id
  398. LEFT JOIN sys.extended_properties PTB
  399. ON PTB.class = 1
  400. AND PTB.minor_id = 0
  401. AND C.[object_id] = PTB.major_id
  402. LEFT JOIN -- 索引及主键信息
  403. (
  404. SELECT IDXC.[object_id],
  405. IDXC.column_id,
  406. Sort = CASE INDEXKEY_PROPERTY(
  407. IDXC.[object_id],
  408. IDXC.index_id,
  409. IDXC.index_column_id,
  410. 'IsDescending'
  411. )
  412. WHEN 1 THEN 'DESC'
  413. WHEN 0 THEN 'ASC'
  414. ELSE ''
  415. END,
  416. PrimaryKey = CASE
  417. WHEN IDX.is_primary_key = 1 THEN N'√'
  418. ELSE N''
  419. END,
  420. IndexName = IDX.Name
  421. FROM sys.indexes IDX
  422. INNER JOIN sys.index_columns IDXC
  423. ON IDX.[object_id] = IDXC.[object_id]
  424. AND IDX.index_id = IDXC.index_id
  425. LEFT JOIN sys.key_constraints KC
  426. ON IDX.[object_id] = KC.[parent_object_id]
  427. AND IDX.index_id = KC.unique_index_id
  428. INNER JOIN -- 对于一个列包含多个索引的情况,只显示第个索引信息
  429. (
  430. SELECT [object_id],
  431. Column_id,
  432. index_id = MIN(index_id)
  433. FROM sys.index_columns
  434. GROUP BY
  435. [object_id],
  436. Column_id
  437. ) IDXCUQ
  438. ON IDXC.[object_id] = IDXCUQ.[object_id]
  439. AND IDXC.Column_id = IDXCUQ.Column_id
  440. AND IDXC.index_id = IDXCUQ.index_id
  441. ) IDX
  442. ON C.[object_id] = IDX.[object_id]
  443. AND C.column_id = IDX.column_id
  444. ORDER BY
  445. O.name,
  446. C.column_id";
  447. return ExcuteDataTable(sql, Connection);
  448. }
  449.  
  450. </script>
  451. <html xmlns="http://www.w3.org/1999/xhtml">
  452. <head id="Head1" runat="server">
  453. <title>数据库管理工具_V1.0</title>
  454. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> </script>
  455. <style type="text/css">
  456. body { font-size: 12px; }
  457. td, th { border: 1px solid gray; border-collapse: collapse; display: table-cell; line-height: 22px; vertical-align: inherit; }
  458. table { border-bottom-width: 0px; border-collapse: collapse; border-color: gray; border-color: gray; border-left-width: 0px; border-right-width: 0px; border-spacing: 0px; border-spacing: 0px; border-spacing: 2px; border-top-width: 0px; display: table; }
  459. fieldset { border: 1px solid gray; margin-bottom: 10px; padding: 8px; }
  460. .demo_title { background-color: lightgray; }
  461. .result { max-height: 400px; max-width: 100%; overflow: auto; }
  462. .data_th { background-color: #D3D8E0; }
  463. .data_td { padding-left: 5px; }
  464. .fail { color: red; font-weight: bold; }
  465. .sucess { color: green; font-weight: bold; }
  466. .demo_main { }
  467. .demo_content { }
  468. .keyword { background-color: lavender; border: 1px dashed darkgray; border-radius: 4px; cursor: pointer; margin-right: 10px; padding: 5px; }
  469. textarea { -moz-box-shadow: 1px 1px 0 #E7E7E7; -moz-box-sizing: border-box; border-color: #CCCCCC #999999 #999999 #CCCCCC; border-style: solid; border-width: 1px; font-family: arial, sans-serif; font-size: 13px; height: 160px; margin: 10px auto; outline-color: -moz-use-text-color; outline-style: none; outline-width: medium; padding: 2px; width: 100%; }
  470. select { height: 25px; border: 1px solid lightgray; }
  471. </style>
  472. </head>
  473. <body>
  474. <form id="form1" runat="server">
  475. <asp:ScriptManager ID="ScriptManager1" runat="server">
  476. </asp:ScriptManager>
  477. <div class="demo_main">
  478. <fieldset class="demo_title">
  479. 数据库管理工具_V1.0
  480. </fieldset>
  481. <fieldset class="demo_content">
  482. <legend>查询语句: </legend>
  483. <asp:TextBox runat="server" ID="txtSql" Style="text-transform: uppercase" TextMode="MultiLine"
  484. Width="99%" Height="100"></asp:TextBox>
  485. <p style="margin: 0; padding: 8px 0 0 0;">
  486. 可用表名:
  487. <select id="selectTables" style="width: 200px;">
  488. </select>
  489. 可用字段:
  490. <select id="selectFields" style="width: 200px;">
  491. <option>请选择表名</option>
  492. </select>
  493. 可用变量: <span class="keyword">SELECT</span><span class="keyword">TOP</span><span class="keyword">100</span><span
  494. class="keyword">*</span><span class="keyword">FROM</span><span class="keyword">DELETE</span><span
  495. class="keyword">UPDATE </span><span class="keyword">CREATE</span>
  496. </p>
  497. </fieldset>
  498. <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  499. <ContentTemplate>
  500. <fieldset class="demo_content">
  501. <legend>操作选项</legend>
  502. <asp:Button runat="server" ID="btnQuery" Text="查询" OnClick="BtnQueryClick" />
  503. <asp:Button runat="server" ID="btnExcute" Text="执行" OnClientClick=" return confirm('确定SQL语句正确并立即执行吗?') "
  504. OnClick="BtnExcuteClick" />
  505. <asp:UpdateProgress ID="UpdateProgress1" runat="server">
  506. <ProgressTemplate>
  507. <asp:Label ForeColor="green" runat="server" ID="lblStatus" Text="处理中,请稍候..." />
  508. </ProgressTemplate>
  509. </asp:UpdateProgress>
  510. </fieldset>
  511. <fieldset class="demo_content">
  512. <legend>查询结果:</legend>
  513. <div class="result">
  514. <asp:Literal runat="server" ID="ltrResult"></asp:Literal>
  515. </div>
  516. </fieldset>
  517. </ContentTemplate>
  518. </asp:UpdatePanel>
  519. </div>
  520. <script type="text/javascript">
  521. //====================================在文本框指定位置插入值=======================================
  522. (function ($) {
  523. $.fn.extend({
  524. insertAtCaret: function (myValue) {
  525. var $t = $(this)[0];
  526. if (document.selection) {
  527. this.focus();
  528. var sel = document.selection.createRange();
  529. sel.text = myValue;
  530. this.focus();
  531. } else if ($t.selectionStart || $t.selectionStart == '0') {
  532. var startPos = $t.selectionStart;
  533. var endPos = $t.selectionEnd;
  534. var scrollTop = $t.scrollTop;
  535. $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
  536. this.focus();
  537. $t.selectionStart = startPos + myValue.length;
  538. $t.selectionEnd = startPos + myValue.length;
  539. $t.scrollTop = scrollTop;
  540. } else {
  541. this.value += myValue;
  542. this.focus();
  543. }
  544. }
  545. });
  546. })(jQuery);
  547. //==================================================================================
  548. var tables = "<%= DataTables %>";
  549. var fields = "<%= Fields %>";
  550. $(function () {
  551. tables = eval(tables);
  552.  
  553. for (var i = 0; i < tables.length; i++) {
  554. $("#selectTables").append("<option>" + tables[i] + "</option>");
  555. }
  556.  
  557. //选择表
  558. $("#selectTables").change(function () {
  559. var table = $(this).val();
  560. fields = eval(fields);
  561. $("#selectFields").empty();
  562. for (var i = 0; i < fields.length; i++) {
  563. if (fields[i].tName == table) {
  564. $("#selectFields").append("<option>" + fields[i].fName + "</option>");
  565. }
  566. }
  567. $("#<%= txtSql.ClientID %>").insertAtCaret(" " + table + " ");
  568. });
  569.  
  570. //选择字段
  571. $("#selectFields").change(function () {
  572. var field = $(this).val();
  573. if (field != "请选择表名") {
  574. $("#<%= txtSql.ClientID %>").insertAtCaret(" " + field + " ");
  575. }
  576. });
  577.  
  578. //选择关键字
  579. $(".keyword").click(function () {
  580. var keyword = $(this).text();
  581. $("#<%= txtSql.ClientID %>").insertAtCaret(" " + keyword + " ");
  582. });
  583.  
  584. });
  585.  
  586. </script>
  587. </form>
  588. </body>
  589. </html>

作者:a497785609 发表于2014-5-2 16:55:08 原文链接
阅读:43 评论:0 查看评论

[原]ASP.NET 数据库访问通用工具的更多相关文章

  1. ASP.NET 数据库访问通用工具

    在工作中,有很多项目已上线后,很多项目的数据库服务器都不会对外开放的,外网想直接访问客户数据库服务器时,可能会出现困难. 这时就需要一个可以查询,更新数据库操作的页面了: 本来用sql语句直接操作数据 ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  3. 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)

    一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...

  4. [原]DbHelper-SQL数据库访问助手

    using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...

  5. [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)

    [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date  周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...

  6. C#与数据库访问技术总结(十八)

    ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...

  7. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

  8. java提高数据库访问效率代码优化

    package com.jb.jubmis.comm; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQL ...

  9. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

随机推荐

  1. express快速搭建web server

    安装express4.x npm install -g express npm install -g express-generator //express命令行工具在4.x分离出来了 express ...

  2. SilverLight 条码 扫描枪 MVVM(转载)

    目前做SL项目时,遇到条码的问题. 客户需要通过条码来加快工作效率以及减少错误.有条码,自然便引入扫描枪这个东西.不解释. 关键点是:扫描枪每次扫描完毕会触发回车 这是解决问题的关键! 现有两种情景: ...

  3. webservice原理

      webservice的工作原理 WebService的主要目标是跨平台的可互操作性.为了达到这一目标,WebService完全基于XML(可扩展标记语言).XSD(XMLSchema)等独立于平台 ...

  4. oracle中Blob和Clob类型的区别

    BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...

  5. sprintf()函数的用法

    sprintf(g_strAppName, "%s",pLast+1); ----------------------------------------------------- ...

  6. 《C++代码设计与重用》 书评

    作者:唐风 主页:www.cnblogs.com/liyiwen   前几个星期买了,一直没有直接细翻,买的时候看了背面的两个推荐,一个是孟岩,一个是Scott Meyers(Effective C+ ...

  7. DiscuzX程序升级教程_不知道关闭论坛的看过来

    DiscuzX程序升级教程,不知道关闭论坛的朋友看过来,适用于  1.0, 1.5 2.0 , 2.5Beta, 2.5RC,2.5, 3.0 1)关闭论坛:后台- 全局- 站点信息- 是否关闭 :是 ...

  8. Twelfth scrum meeting 2015/11/9

    第一阶段的开发即将结束,工程代码已经集合完毕,计划在2015年11月10日发布第一阶段的成果,本次会议主要商量下一阶段需要完成的工作以及页面修改,还有测试人员的bug整理. 会议记录: 第一项:界面修 ...

  9. php面试题之二——数据结构和算法(高级部分)

    二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...

  10. 新鲜出炉的百度js面试题

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 最近两位同学入职百度,带回来的笔试题基本上毫无悬念,不过有一个小题看到让人忍不住笑出声来,真的很无聊 ...