首页 > 语言 > 关键词  > Access最新资讯  > 正文

ACCESS实用技巧:ACCESS的参数化查询

2008-05-22 16:57 · 稿源:互联网

最近因项目需要用ACCESS做数据库开发WEB项目
看论坛上还许多人问及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


举报

  • 相关推荐
  • 腾讯云GooseFS团队与厦门大学合作成果 AC-Cache入选 PPOPP

    腾讯云研发的AC-Cache内存缓存系统入选并行编程顶会PPOPP2025。该系统针对小型对象存储场景,通过感知访问关联性的创新设计,成功解决负载不均衡问题。实测显示,AC-Cache可降低80.2%尾部延迟,提升5倍以上访问吞吐量。该技术已开源并应用于腾讯云GooseFS产品,在手机制造、自动驾驶等领域取得显著成效:某手机厂商模型分发速度达300MB/s,带宽提升10倍;某车企训练效率提高30%,数据命中率超90%。AC-Cache的突破将助力企业突破存储性能瓶颈。

  • 旷世之声QCC Dongle Pro发布|让苹果设备无线畅听LDAC无损音质

    QCC Dongle Pro和QCC Dongle是全球首款获得苹果MFi认证的无损蓝牙发射器,突破性地实现了苹果设备无线无损音质传输。产品基于高通Snapdragon Sound™技术和索尼LDAC高清音频编解码协议,支持aptX、aptX HD、aptX Adaptive、aptX Lossless等多种编码格式。QCC Dongle Pro还独家支持LDAC编码,传输速率高达990kbps。该产品已通过日本VGP大奖认证,7月18日在京东首发售价599元,为苹果生态用户带来更丰富的高品质无线音频体验。

  • 中航未来丨CAAC无人机执照培训 6月班圆满结营

    中国民航局无人机执照培训6月班圆满结业。培训从理论到实践,涵盖无人机定义、模拟器飞行、足球赛竞技等多元内容。学员通过法规学习、模拟操作和实机训练,掌握无人机操控技能。培训强调"知规守规"的重要性,并通过趣味竞技培养团队协作。结业仪式上,学员从"科技小白"成长为"准飞手",不仅学会技术操作,更理解敬畏规则、团队协作的价值。这段研学之旅为学员开启探索科技的新篇章。

  • 商查平台企业信息查询新范式:水滴信用企业查询MCP

    水滴信用推出的企业信息查询MCP平台,通过大模型技术重构传统商业查询模式,实现三大创新:1)自然语言交互,用户可用日常语言提问并持续追问,系统自动整合工商、司法、知识产权等跨维度数据;2)全景数据架构,打破信息孤岛,智能关联股权穿透、供应链等复杂关系网络;3)动态智能报告,自动生成定制化分析报告,针对风控、投资等不同场景突出关键洞察。该平台将专业用户从繁琐信息收集中解放,使业务人员零门槛获取商业洞察,标志着企业查询从"信息仓库"迈向"智能中枢"时代。

  • 大模型时代企业查询第一站——水滴信用企业数据查询MCP

    水滴信用推出企业数据查询MCP平台,通过大模型技术实现企业数据查询的智能化升级。该平台整合3.7亿市场主体数据,覆盖工商、司法、知识产权等六大类1000+维度信息,支持自然语言交互和跨域关联分析。目前已应用于银行风控、证券投研、供应链管理等核心场景,显著提升商业决策效率。作为央行备案征信机构,水滴信用凭借权威数据源和专业团队,正推动企业征信服务进入AI普惠时代,降低高价值商业情报获取门槛,促进透明可信的商业环境形成。

  • 明略科技研究成果被ACM MM 2025接收,攻克个性化注视点预测难题

    明略科技与北京大学、吉林大学合作研发的PRE-MAP模型被ACM MM2025接收。该研究针对现有视觉注意力模型在个性化注视点预测中的局限性,提出新方法PRE-MAP和大规模多模态数据集SPA-ADV,能更好捕捉个体差异并提升高分辨率视频中的多属性注视点预测精度。该成果是明略科技在AI大模型应用领域的又一突破,此前其超图多模态大模型(HMLLM)曾获ACM MM2024最佳论文提名。研究团队通过4500名不同背景用户的真实视觉行为数据,结合多模态大模型技术,实现了"某类人会看哪里"的精准预测,为广告创意优化和投放效果评估提供科学依据。

  • ​再树智能新地标!河北首家Aqara Space旗舰店落地石家庄

    7月12日,Aqara在石家庄开设河北首家智能体验馆,标志着品牌深化华北市场布局的重要一步。该体验馆通过客厅、卧室等真实场景,展示与Apple Home生态深度集成的全屋智能解决方案,消费者可体验语音控制、自动灯光等便捷功能。开业典礼上,品牌代表强调"科技赋能空间,智享美好生活"理念,展现引领智能家居未来的决心。该体验馆不仅提供产品展示,更为当地消费者搭建了接触前沿智能科技的平台,彰显Aqara在中国智能家居领域的领导地位。

  • WEY斩获EAC双料大奖,“零重力座椅+易清洁织物”亮点突出

    在EAC2025易贸汽车产业展上,WEY品牌旗下全新高山和蓝山凭借创新技术斩获两项大奖。全新高山的"零重力座椅"获"EAC2025年度创新座椅奖",采用NASA定义的零重力悬浮设计,大幅提升乘坐舒适性;全新蓝山的"易清洁织物"获"E-Design Awards2025材料创新奖",解决了传统织物难清洁痛点。这两项创新展现了WEY品牌在内饰科技领域的领先实力,也印证了其"为用户而改变"的核心理念。全新高山上市后销量持续攀升,24小时订单突破5900辆,迅速站稳30-40万新能源MPV市场。

  • 《赛博朋克2077:终极版》明日登陆苹果Mac:支持光追

    该版本包含《赛博朋克2077》游戏本体及DLC《往日之影》,支持光线追踪、帧生成和内置的空间音频等功能,支持苹果的MetalFX图像超分技术。 此外还提供HDR、手柄、妙控鼠标和触控板支持,同时支持跨平台进度同步。 需要注意的是,虽然游戏本身支持所有M系列芯片的Mac设备,无论台式机还是笔记本,但8GB设备无法运行,至少需要16GB内存才行。

  • 2299元起!三星Galaxy Watch 8/Classic/Ultra智能手表发布

    三星今晚除了三款折叠屏手机之外,还推出了三款Galaxy Watch 8系列智能手表。 具体型号分别是Galaxy Watch 8、Galaxy Watch 8 Classic、Galaxy Watch 8 Ultra,起售价2299元。 三款产品统一采用了天圆地方”的设计语言,表壳为圆角矩形,表盘则是传统圆形。 三星Galaxy Watch 8 提供慕岩灰、星辉银两种配色,有44mm和40mm两种尺寸。 内部结构重新设计,组件集成度提升30%,整体厚度较上代减少1