使用ASP源码操作Access数据库的方法详解 (asp源码access数据库)

ASP是一种常用的动态网页开发语言,擅长与数据库交互。而在常见的数据库选择中,Access是一种基础、简单、易于上手的数据库类型。这篇文章将详细介绍使用ASP源码操作Access数据库的方法。

一、创建Access数据库

在操作之前,需要先创建好Access数据库。打开Microsoft Access软件,选择文件>新建>空白数据库,指定名称及存储路径,点击创建。

二、连接Access数据库

连接Access数据库需要通过ADODB对象来完成,它是ASP内置对象之一。代码示例:

“`

<%

dim conn

set conn = Server.CreateObject(“ADODB.Connection”)

conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &_

Server.MapPath(“database.mdb”)

response.write(“Connection OK.”)

conn.Close

set conn = Nothing

%>

“`

以上代码,先声明了ADODB.Connection对象conn,并且指定了连接字符串,其中provider为访问Jet OLEDB数据源所需的OLE DB提供程序,Data Source指定Access数据库位置及名称。通过conn.Open方法打开连接,打开成功后,Response.Write方法会输出”Connection OK.”。最后关闭连接并清空对象。

三、执行SQL语句

在连接数据库后,需要执行SQL语句来操作数据库。SQL语句的种类有很多,这里只介绍基本的增删改查操作。

1.查询数据

查询数据指的是从数据库中获取特定的信息,SELECT语句用于实现此功能。代码示例:

“`

<%

dim conn, rs

set conn = Server.CreateObject(“ADODB.Connection”)

conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &_

Server.MapPath(“database.mdb”)

set rs = Server.CreateObject(“ADODB.Recordset”)

rs.open “SELECT * FROM userinfo”,conn

do while not rs.eof

response.write(rs(“username”) & “
“)

rs.movenext()

loop

rs.close

set rs = Nothing

conn.Close

set conn = Nothing

%>

“`

以上代码,先声明了ADODB.Connection对象conn及ADODB.Recordset对象rs,并且在conn对象的Open方法中指定了连接字符串。在rs对象的Open方法中,传入了要查询的字段列表和表名。通过do-while循环遍历查询结果,再通过rs对象的movenext方法继续下一条记录。查询结束后,关闭记录集和连接并清空对象。

2.添加数据

添加数据指的是往数据库中插入新数据,INSERT INTO语句用于实现此功能。代码示例:

“`

<%

dim conn

set conn = Server.CreateObject(“ADODB.Connection”)

conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &_

Server.MapPath(“database.mdb”)

conn.execute(“INSERT INTO userinfo (username, age) VALUES (‘Alice’, 20)”)

conn.execute(“INSERT INTO userinfo (username, age) VALUES (‘Bob’, 22)”)

response.write(“Insert OK.”)

conn.Close

set conn = Nothing

%>

“`

以上代码,通过conn.execute方法执行INSERT INTO语句,向userinfo表中插入了两条记录。执行成功后,Response.Write方法会输出”Insert OK.”。

3.修改数据

修改数据指的是在数据库中更新已有数据,UPDATE语句用于实现此功能。代码示例:

“`

<%

dim conn

set conn = Server.CreateObject(“ADODB.Connection”)

conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &_

Server.MapPath(“database.mdb”)

conn.execute(“UPDATE userinfo SET age = 23 WHERE username = ‘Alice'”)

response.write(“Update OK.”)

conn.Close

set conn = Nothing

%>

“`

以上代码,通过conn.execute方法执行UPDATE语句,将userinfo表中字段名为age,用户名为”Alice”的记录的age值更新为23。执行成功后,Response.Write方法会输出”Update OK.”。

4.删除数据

删除数据指的是在数据库中删除已有数据,DELETE语句用于实现此功能。代码示例:

“`

<%

dim conn

set conn = Server.CreateObject(“ADODB.Connection”)

conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &_

Server.MapPath(“database.mdb”)

conn.execute(“DELETE FROM userinfo WHERE age > 22”)

response.write(“Delete OK.”)

conn.Close

set conn = Nothing

%>

“`

以上代码,通过conn.execute方法执行DELETE语句,将userinfo表中age大于22的记录删除。执行成功后,Response.Write方法会输出”Delete OK.”。

四、结语

以上介绍了使用ASP源码操作Access数据库的基本方法,主要包括连接数据库、执行SQL语句等。通过此方法,可以灵活地对数据库进行操作,为网站及应用程序提供数据支持。虽然Access数据库不如MySQL、Oracle等数据库类型功能强大,但对于入门ASP的开发者来说,其基本操作还是很容易上手的。

相关问题拓展阅读:

ASP.NET2.0(C#)连接access数据库源代码?

1、

中漏

2、OleDbConnection objConnection;

OleDbDataAdapter objCommand;

string strConnect;

string strCommand;

DataSet DataSet1 = new DataSet();

strCommand = “SELECT ProductName, UnitPrice FROM products”;

objConnection = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings.ToString());

objCommand = new OleDbDataAdapter(strCommand, objConnection);

objCommand.Fill(DataSet1, “products”);

DataGrid1.DataSource=DataSet1.Tables.DefaultView;

DataGrid1.DataBind();

在web.config中的写法如下:

桐昌

程序中的数据访问类中我把”SQLConnString”轿轮胡和”dbPath”取出来连接成一个字闭拦符串”CONN_STRING_NON_DTC”

public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings.ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings) + “;”;

顶diamondiamon

初学asp6.0,跪求对ACCESS数据库增,删,查,改的源码

// GridImageDlg.cpp : implementation file

//

#include “stdafx.h”

#include “GridImage.h”

#include “GridImageDlg.h”

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE = __FILE__;

#endif

extern CGridImageApp theApp;//james???

//////////猜桐/////////////////////皮兆哗//////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////燃行//////////

// CGridImageDlg dialog

CGridImageDlg::CGridImageDlg(CWnd* pParent /*=NULL*/)

: CDialog(CGridImageDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CGridImageDlg)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CGridImageDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CGridImageDlg)

// NOTE: the ClassWizard will add DDX and DDV calls here

//}}AFX_DATA_MAP

DDX_GridControl(pDX, IDC_GRIDCTRL, m_GridCtrl);

}

BEGIN_MESSAGE_MAP(CGridImageDlg, CDialog)

//{{AFX_MSG_MAP(CGridImageDlg)

ON_NOTIFY(GVN_BEGINLABELEDIT, IDC_GRIDCTRL, OnGridSelChange )

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_ADD, OnAdd)

ON_BN_CLICKED(IDC_INSERT, OnInsert)

ON_BN_CLICKED(IDC_DELETE, OnDelete)

ON_BN_CLICKED(IDC_SAVE, OnSave)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CGridImageDlg message handlers

BOOL CGridImageDlg::OnInitDialog()

{

CDialog::OnInitDialog();

try

{

pRecordset.CreateInstance(“ADODB.Recordset”);

pRecordset->Open(“SELECT * FROM 基本信息图片”,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

}

catch(_com_error e)///捕捉异常

{

AfxMessageBox(“读取数据库失败!”);///显示错误信息

}

//获得主程序的路径并建立一个文件夹。

CString sPath;

GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);

sPath.ReleaseBuffer ();

int nPos;

nPos=sPath.ReverseFind (‘\\’);

sPath=sPath.Left (nPos);

CString strCrePath; //在程序路径下创建一个文件夹

strCrePath.Format(“%s%s”,sPath,_T(“\\临时图片\\”));

CreateDirectory(strCrePath,NULL);

pBuffer = NULL;

index = 1;

m_GridCtrl.SetColumnCount(7);

m_GridCtrl.SetFixedRowCount(1);

m_GridCtrl.SetItemText(0, 0, _T(“图片编号”));

m_GridCtrl.SetItemText(0, 1, _T(“桥梁编号”));

m_GridCtrl.SetItemText(0, 2, _T(“图片数据”));

m_GridCtrl.SetItemText(0, 3, _T(“图片类别名称”));

m_GridCtrl.SetItemText(0, 4, _T(“图片后缀”));

m_GridCtrl.SetItemText(0, 5, _T(“拍摄日期”));

m_GridCtrl.SetItemText(0, 6, _T(“图片描述”));

int m_ncount ;

m_ncount=pRecordset->GetRecordCount();

m_GridCtrl.SetRowCount(m_ncount+1);

//设置图片数据栏灰色

while (m_ncount > 0)

{

m_GridCtrl.SetItemBkColour(m_ncount,2,RGB(236,233,216));

m_GridCtrl.SetItemText(m_ncount,2,_T(“”));

m_ncount–;

}

int row = 1;

while (!pRecordset->adoEOF)

{

CString str;

FieldsPtr pFields = pRecordset->Fields;

FieldPtr pField = pFields->GetItem(0L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 0L,(char*)(_bstr_t)pField->Value);

pField = pFields->GetItem(1L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 1L, (char*)(_bstr_t)pField->Value);

pField = pFields->GetItem(2L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 3L,(char*)(_bstr_t)pField->Value);

pField = pFields->GetItem(3L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 4L, (char*)(_bstr_t)pField->Value);

pField = pFields->GetItem(5L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 5L, (char*)(_bstr_t)pField->Value);

pField = pFields->GetItem(6L);

if (pField->Value.vt != VT_NULL)

m_GridCtrl.SetItemText(row, 6L, (char*)(_bstr_t)pField->Value);

//读取图片数据

nSize = pRecordset->GetFields()->GetItem(“图片数据”)->ActualSize;

if (nSize 0)

{

_variant_t varBLOB;

varBLOB = pRecordset->GetFields()->GetItem(“图片数据”)->GetChunk(nSize);

if(varBLOB.vt == (VT_ARRAY | VT_UI1))

{

if(pBuffer = new BYTE ) ///重新申请必要的存储空间

{

char *pBuf = NULL;

SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);

memcpy(pBuffer,pBuf,nSize); ///复制数据到缓冲区

SafeArrayUnaccessData (varBLOB.parray);

}

}

//保存到临时文件中

CString strExt;

strExt.Format(“%s%s”,_T(“.”),m_GridCtrl.GetItemText(row,4));

CString str;

str.Format(“%s%d%s”,strCrePath,index,strExt); //文件名和后缀名

CFile outFile(str,CFile::modeCreate|CFile::modeWrite);

outFile.Write(pBuffer,nSize);

CString strindex;

strindex.Format(“%d”,index);

m_GridCtrl.SetItemText(row,2,strindex);

index++;

}

row++;

pRecordset->MoveNext();

}

return TRUE; // return TRUE unless you set the focus to a control

}

void CGridImageDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CGridImageDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(_CXICON);

int cyIcon = GetSystemMetrics(_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() – cxIcon + 1) / 2;

int y = (rect.Height() – cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CGridImageDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CGridImageDlg::OnAdd()

{

//添加一行

int rowcount = m_GridCtrl.GetRowCount();

m_GridCtrl.SetRowCount(rowcount+1);

//设置该行属性,颜色,不可以修改,字段

m_GridCtrl.SetItemBkColour(rowcount,2,RGB(236,233,216));

CString strindex;

strindex.Format(“%d”,index);

m_GridCtrl.SetItemText(rowcount,2,strindex);

index++;

//添加日期数据

CTime nTime = CTime::GetCurrentTime();

CString str;

str.Format(“%d-%d-%d”,nTime.GetYear(),nTime.GetMonth(),nTime.GetDay());

m_GridCtrl.SetItemText(rowcount, 5, str);

//设置光标,自动滚动到最后一行

SCROLLINFO si;

si.cbSize = sizeof(SCROLLINFO);

si.fMask = SIF_POS;

si.nPos = 20230;

m_GridCtrl.SetScrollInfo(SB_VERT,&si,TRUE);

m_GridCtrl.SetFocusCell(rowcount,0);

}

void CGridImageDlg::OnInsert()

{

int row = m_GridCtrl.GetFocusCell().row;

if (row==-1)

{

MessageBox(_T(“请选择插入位置”));

return;

}

int rowcount = m_GridCtrl.GetRowCount();

m_GridCtrl.InsertRow(“”,row);

m_GridCtrl.SetFocusCell(row,0);

m_GridCtrl.SetRowHeight(row,25);

//设置该行属性,颜色,字段

m_GridCtrl.SetItemBkColour(row,2,RGB(236,233,216));

CString strindex;

strindex.Format(“%d”,index);

m_GridCtrl.SetItemText(row,2,strindex);

index++;

//添加日期数据

CTime nTime = CTime::GetCurrentTime();

CString str;

str.Format(“%d-%d-%d”,nTime.GetYear(),nTime.GetMonth(),nTime.GetDay());

m_GridCtrl.SetItemText(row, 5, str);

m_GridCtrl.Invalidate();

}

void CGridImageDlg::OnDelete()

{

int row = m_GridCtrl.GetFocusCell().row;

if( row == -1)

{

MessageBox(_T(“请选择要删除的行”));

return;

}

if (row > 0)

{

m_GridCtrl.DeleteRow(row);

}

//设置光标位置

if (m_GridCtrl.GetRowCount() > row)

m_GridCtrl.SetFocusCell(row,0);

else

m_GridCtrl.SetFocusCell(m_GridCtrl.GetRowCount()-1,0);

m_GridCtrl.Invalidate();

}

void CGridImageDlg::OnSave()

{

try

{

pRecordset.CreateInstance(“ADODB.Recordset”);

pRecordset->Open(“SELECT * FROM 基本信息图片”,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

}

catch(_com_error e)///捕捉异常

{

AfxMessageBox(“读取数据库失败!”);///显示错误信息

}

//删除所有记录

while (!pRecordset->adoEOF)

{

pRecordset->Delete(adAffectCurrent);///删除当前记录

pRecordset->MoveNext();

}

int m_Rcount = 1;

while (m_Rcount AddNew();

if(m_GridCtrl.GetItemText(m_Rcount,0)!=””)

pRecordset->Fields->GetItem(_variant_t(“图片编号”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,0));

if(m_GridCtrl.GetItemText(m_Rcount,1)!=””)

pRecordset->Fields->GetItem(_variant_t(“桥梁编号”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,1));

//获得文件名

CString m_sname;

m_sname.Format(“%s”,m_GridCtrl.GetItemText(m_Rcount,2));

//获取扩展名

CString m_sExt;

m_sExt.Format(“%s%s”,_T(“.”),m_GridCtrl.GetItemText(m_Rcount,4));

//获得主程序的路径

CString sPath;

GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);

sPath.ReleaseBuffer ();

int nPos;

nPos=sPath.ReverseFind (‘\\’);

sPath=sPath.Left (nPos);

//获取图片数据

CFile f;

CString FilePathName;

FilePathName.Format(“%s%s%s%s”,sPath,_T(“\\临时图片\\”),m_sname,m_sExt); //文件名和后缀名

CFileException e;

if(f.Open(FilePathName, CFile::modeRead | CFile::typeBinary, &e)) //打开了一个文件

{

int nSize = f.GetLength();//先得到文件长度

BYTE * pBuffer = new BYTE ; //按文件的大小在堆上申请一块内存

if (f.Read(pBuffer, nSize) > 0 ) //把文件读到pBuffer(堆上申请一块内存)

{ // +—-

BYTE *pBuf = pBuffer; ///下面这一大段是把pBuffer里的数据放到库中

VARIANT varBLOB;

SAFEARRAY *psa;

SAFEARRAYBOUND rgsabound;

if(pBuf)

{

rgsabound.lLbound = 0;

rgsabound.cElements = nSize;

psa = SafeArrayCreate(VT_UI1, 1, rgsabound);

for (long i = 0; i GetFields()->GetItem(“图片数据”)->AppendChunk(varBLOB);

}

delete pBuffer; //删掉堆上申请的那一块内存

pBuf=0; //以防二次乱用

f.Close();

}

}

if(m_GridCtrl.GetItemText(m_Rcount,3)!=””)

pRecordset->Fields->GetItem(_variant_t(“图片类别名称”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,3));

if(m_GridCtrl.GetItemText(m_Rcount,4)!=””)

pRecordset->Fields->GetItem(_variant_t(“图片后缀”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,4));

if(m_GridCtrl.GetItemText(m_Rcount,5)!=””)

pRecordset->Fields->GetItem(_variant_t(“拍摄日期”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,5));

if(m_GridCtrl.GetItemText(m_Rcount,6)!=””)

pRecordset->Fields->GetItem(_variant_t(“图片描述”))->Value=_bstr_t(m_GridCtrl.GetItemText(m_Rcount,6));

m_Rcount++;

pRecordset->Update();

}

}

void CGridImageDlg::OnCancel()

{

//删除过程:先删除文件夹的文件,再删除文件夹

CString sPath;

GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);

sPath.ReleaseBuffer ();

int nPos;

nPos=sPath.ReverseFind (‘\\’);

sPath=sPath.Left (nPos);

CString strDelPath;

strDelPath.Format(“%s%s”,sPath,_T(“\\临时图片”));//获得临时图片的路径

CFileFind tempFind;

CString temp;

temp=strDelPath+”\\*.*”;//遍历临时图片文件夹下所有文件

BeginWaitCursor();

BOOL IsFinded=tempFind.FindFile(temp);

while(IsFinded)

{

IsFinded=tempFind.FindNextFile();

if(!tempFind.IsDots())

{

if(tempFind.IsDirectory())

{

CString tempStr;

tempStr=tempFind.GetFileName();

tempStr=strDelPath+”\\”+tempStr;

DeleteFile(tempStr);

}

else

{

CString tempStr;

tempStr=strDelPath+”\\”+tempFind.GetFileName();

DeleteFile(tempStr);

}

}

}

tempFind.Close();

if(!RemoveDirectory(strDelPath))

{

MessageBox(“删除目录失败!”,”警告信息”,MB_OK);

}

//关闭窗口

CDialog::OnCancel();

}

void CGridImageDlg::OnGridSelChange(NMHDR * pNotifyStruct, LRESULT * result )

{

NM_GRIDVIEW* pNmgv = (NM_GRIDVIEW*)pNotifyStruct;

*result = 0;

//获得第3列,某行(首行除外)

if ((pNmgv->iColumn == 2)&&(pNmgv->iRow != 0))

{

dlgData.m_nrow = pNmgv->iRow-1;

dlgData.m_sname = m_GridCtrl.GetItemText(pNmgv->iRow,2);//获得索引名

dlgData.m_OutFileName = m_GridCtrl.GetItemText(pNmgv->iRow,3); //获得文件名

dlgData.m_sEXt = m_GridCtrl.GetItemText(pNmgv->iRow,4); //获得扩展名

if (dlgData.m_sname == “”) //如果选中的行没有图片编号

{

CString strIndex;

strIndex.Format(“%d”,index);

m_GridCtrl.SetItemText(dlgData.m_nrow+1,2,strIndex);

dlgData.m_sname = strIndex;

index++;

}

if (dlgData.DoModal()==IDOK)

{

//如果浏览文件,获得文件名及扩展名

if (dlgData.FileTitle!=””||dlgData.FileEXt!=””)

{

m_GridCtrl.SetItemText(dlgData.m_nrow+1,3,dlgData.FileTitle);

m_GridCtrl.SetItemText(dlgData.m_nrow+1,4,dlgData.FileEXt);

dlgData.FileTitle = “”;

dlgData.FileEXt = “”;

}

}

}

}

增加:insert

into 表名

values(’插入的内容’)

删除:delete

from 表名

查询:select* from 表名 where 条件

修改:update 表名

set 列名=表达式

where 条举历件

根据具体情况把相应的地方填上就谈局行了。我说的很笼统,具体还要你自己体会。

我建议你去买本数据库的书看看!很有含答让用的!

asp源码access数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于asp源码access数据库,使用ASP源码操作Access数据库的方法详解,ASP.NET2.0(C#)连接access数据库源代码?,初学asp6.0,跪求对ACCESS数据库增,删,查,改的源码的信息别忘了在本站进行查找喔。


数据运维技术 » 使用ASP源码操作Access数据库的方法详解 (asp源码access数据库)