ACCESS的參數化查詢

来源:http://www.cnblogs.com/aspnetjia/archive/2016/02/15/5190088.html
-Advertisement-
Play Games

看論壇上還許多人問及ACCESS被註入的安全問題許多人解決的方法仍然是用Replace替換特殊字元,然而這樣做也並沒有起到太大做用今天我就把我用ACCESS參數化查詢的一些方法和經驗和大家分享希望對大家有所啟發,有寫的不對的地方希望高手們多多指教 ASP.NET 用OleDbCommand的new


看論壇上還許多人問及ACCESS被註入的安全問題
許多人解決的方法仍然是用Replace替換特殊字元,然而這樣做也並沒有起到太大做用
今天我就把我用ACCESS參數化查詢的一些方法和經驗和大家分享
希望對大家有所啟發,有寫的不對的地方希望高手們多多指教

 

ASP.NET 用OleDbCommand的new OleDbParameter創建參數貨查詢
ASP用Command的CreateParameter 方法創建參數化查詢
(SQL儲存過程查詢也是用這個方法建立的)

ASP.NET C#語法

 

OleDbParameter parm = new OleDbParameter(Name, Type, Direction, Size, Value);
(實際上它有七重載大傢具體大家可以在VS.net裡面就可以看到)
參數
Name        可選,字元串,代表 Parameter 對象名稱。
Type        可選,長整型值,指定 Parameter 對象數據類型。
Direction   可選,長整型值,指定 Parameter 對象類型。。
Size        可選,長整型值,指定參數值最大長度(以字元或位元組數為單位)。
Value       可選,變體型,指定 Parameter 對象的值。
以下是實例,查詢news表中所有tsing發表的新聞
  -------------------------------------------------------
  sql="select * from newss where username=? order by id"
 //註意查詢的條件均用?號表示
  OleDbConnection conn = new OleDbConnection(connString);
  OleDbCommand cmd = new OleDbCommand(sql,conn); 
  OleDbParameter parm = new OleDbParameter("temp",OleDbType.VarChar, 50); 
  //temp為Parameter對象可隨便定義,OleDbType.VarChar指定為字元串,長度50
  parm.Direction = ParameterDirection.Input;
  //指定其類型輸入參數
  cmd.Parameters.Add(parm);
 cmd.Parameters["temp"].Value = "tsing";
  //查詢tsing,也可以寫成cmd.Parameters[0]
 conn.Open();
 cmd.ExecuteReader();

 

ASP VBSCRIPT語法

Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
參數同上
以下是實例,查詢news表中所有tsing發表的新聞
  ------------------------------------------------------
  et conn = Server.CreateObject("Adodb.Connection")
  conn.ConnectionString = connString
  conn.open()
  set mycmd = Server.CreateObject("ADODB.Command")
  mycmd.ActiveConnection=conn
  mycmd.CommandText=sql
  mycmd.Prepared = true
  set mypar = mycmd.CreateParameter("temp",129,1,50,"tsing")
  mycmd.Parameters.Append mypar
  set myrs = mycmd.Execute 網頁教學網

與上面基本相同不同的地方法是asp在對參數的表達上面不同
  129為adChar,1就是指示輸入參數(是其實是預設值)
大家請參閱MICROSOFT的ADOVB.Inc:

  ''----   ParameterDirectionEnum   Values   ----   
  Const   adParamUnknown   =   0   
  Const   adParamInput   =   1   
  Const   adParamOutput   =   2   
  Const   adParamInputOutput   =   3   
  Const   adParamReturnValue   =   4  
''----   DataTypeEnum   Values   ----   
  Const   adEmpty   =   0   
  Const   adTinyInt   =   16   
  Const   adSmallInt   =   2   
  Const   adInteger   =   3   
  Const   adBigInt   =   20   
  Const   adUnsignedTinyInt   =   17   
  Const   adUnsignedSmallInt   =   18   
  Const   adUnsignedInt   =   19   
  Const   adUnsignedBigInt   =   21   
  Const   adSingle   =   4   
  Const   adDouble   =   5   
  Const   adCurrency   =   6   
  Const   adDecimal   =   14   
  Const   adNumeric   =   131   
  Const   adBoolean   =   11   
  Const   adError   =   10   
  Const   adUserDefined   =   132   
  Const   adVariant   =   12   
  Const   adIDispatch   =   9   
  Const   adIUnknown   =   13   
  Const   adGUID   =   72   
  Const   adDate   =   7   
  Const   adDBDate   =   133   
  Const   adDBTime   =   134   
  Const   adDBTimeStamp   =   135   
  Const   adBSTR   =   8   
  Const   adChar   =   129   
  Const   adVarChar   =   200   
  Const   adLongVarChar   =   201   
  Const   adWChar   =   130   
  Const   adVarWChar   =   202  


  Const   adLongVarWChar   =   203   
  Const   adBinary   =   128   
  Const   adVarBinary   =   204   
  Const   adLongVarBinary   =   205

 

附我寫的C#類,和VBSCRIPT函數,希望對大家有幫助

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Data.OleDb;
namespace acc_select
{
    /// <summary>
    /// accselect 的摘要說明
    /// </summary>
    public class accselect
    {
    //"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\dq\db1.mdb"
        private string conn = ConfigurationManager.ConnectionStrings["tsingConnectionString"].ToString();
        public string sql = string.Empty;
        public int t = 4;
        public object v = null;
        public accselect()
        {
        }


        /// <summary>
        /// 構造函數,傳遞ACC參數查詢語句
        /// </summary>
        /// <param name="strsql">strsql字元型</param>
        public accselect(string strsql)
        {
            sql = strsql;
        }
        /// <summary>
        /// 構造函數,傳遞ACC參數查詢語句
        /// </summary>
        /// <param name="strsql">參數查詢語句</param>
        /// <param name="total">位元組數</param> 
        public accselect(string strsql, int total)
        {
            sql = strsql;
            t = total;
        }
        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="strsql">參數查詢語句</param>
        /// <param name="total">位元組數</param>
        /// <param name="value">OBJECT值</param>
        public accselect(string strsql, int total, object value)
        { 
            sql = strsql;
            t = total;
            v = value;
        }
        /// <summary>
        ///  getOdd方法返回OleDbDataReader
        /// </summary>
        /// <param name="odt">定義OleDbType類型</param>
        /// <returns></returns>
        public OleDbDataReader getOdd(OleDbType odt)
        {
            OleDbConnection conns = new OleDbConnection(this.conn);
            OleDbCommand cmd = new OleDbCommand(this.sql, conns); 
            OleDbParameter parm = new OleDbParameter("temp", odt, this.t);
            parm.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(parm);
            cmd.Parameters[0].Value = this.v;
            conns.Open();
            OleDbDataReader oda = cmd.ExecuteReader();
            cmd.Dispose();
            return oda;
        }
        string Sql
        {
            get 
            {
                return sql;
            }
            set
            {
                sql = value;
            }
        }
        int T
        {
            get
            {
                return t;
            } 
            set
            {
                t = value;
            }
        }
        object V
        {
            get
            {
                return v;
            }
            set
            {
                v = value; 
            }
        }
    }
}
//調用方法
//accselect acc = new accselect();
//acc.sql = "select * from dtt where d_id=?";
//acc.t = 10;
//acc.v = 1;
//OleDbDataReader oda = acc.getOdd(OleDbType.VarChar);
//Repeater1.DataSource = oda;
//Repeater1.DataBind();

 

function acc_sql(sql,adotype,adodct,strlong,values)
dim connstring,mycmd,myrs,conn
  
  connString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db1.mdb")
  set conn = Server.CreateObject("Adodb.Connection")
  conn.ConnectionString = connString
  conn.open()
  set mycmd = Server.CreateObject("ADODB.Command")
  mycmd.ActiveConnection=conn
  mycmd.CommandText=sql
  mycmd.Prepared = true
  set mypar = mycmd.CreateParameter("temp",adotype,adodct,strlong,values)
  mycmd.Parameters.Append mypar
  set myrs = mycmd.Execute
  set acc_sql=myrs  
end function 
''調用方法
''dim rs
''sql="select * from users where id=? order by id"
''set rs=acc_sql(sql,3,1,4,1)
''if not rs.eof then
    ''response.Write(rs(1))
''end if

轉載自:http://www.aspnetjia.com/Cont-203.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2個月時間,項目開發OK,已提交一版進行審核。這裡總結下極光推送的使用。 1.首先當然是賬號的申請 2.之後 環境配置: 這裡放鏈接:http://docs.jpush.io/client/ios_tutorials/#_6 極光官方文檔講的很清晰,給贊(文檔可以操作到開啟remote notifi
  • Android Intent調用 Uri的使用幾種格式
  • MPAndroidChart開源圖表庫之餅狀圖 為大家介紹一款圖標開源庫MPAndroidChart,它不僅可以在Android設備上繪製各種統計圖表,而且可以對圖表進行拖動和縮放操作,用起來非常靈活。MPAndroidChart同樣擁有常用的圖表類型:線型圖、餅圖、柱狀圖和散點圖。 mpandro
  • 本地: 1.進入MySQL目錄下的bin文件夾:e:回車; e:\>cd mysql\bin? 回車 2.導出資料庫:mysqldump -u 用戶名 -p 資料庫名 > 導出的文件名 範例: mysqldump -u root -p abc > abc.sql (導出資料庫abc到abc.sql文
  • 連接mysql時遇到的錯誤。 原因:該用戶沒有許可權連接訪問mysql資料庫 解決方法:網站上搜了好多,試了都沒有用。最終在登陸的信息頁面用root用戶登陸時不輸入root密碼即可。
  • 從08開始,sql server 提供了一種叫做 變更數據捕獲 cdc(Change Data Capture) 的功能,可以通過啟用這個功能,來實現查看資料庫中的表對象的數據的變化情況。(我感覺就是有點像sql server 自己提供的用戶能直接看懂的數據變化功能)。 根據官方的說法。使用cdc
  • 一、簡介 MongoDB 是由C++語言編寫的,是一個基於分散式文件存儲的開源資料庫系統。MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含
  • 查看oracle狀態的SQL語句 select status from v$instance; 查看oracle控制文件的SQL語句 select name from v$controlfile; 查看oracle數據文件的SQL語句 select name from v$datafile; 查看o
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...