在C#(ASP.MVC)中与ADODB一起使用Access DB(.mdb),就像使用经典的ASP

在C#(ASP.MVC)中与ADODB一起使用Access DB(.mdb),就像使用经典的ASP,c#,asp.net-mvc,ms-access,ado.net,asp-classic,C#,Asp.net Mvc,Ms Access,Ado.net,Asp Classic,我过去经常使用经典的asp。我目前正在尝试ASP.NET MVC 到目前为止我很喜欢它,但是我错过了ADODB连接的简单用法。 我在网上搜索任何简单明了的解决方案,如下面的代码, 在经典的ASP上使用,但我发现的一切都要复杂得多,而且/或者没有 C#上的ADODB。我想要记录集,不需要“更新..”SQL,列(“名称”)而不是列[0],等等 在…上这一切都过去了吗 Set db = Server.CreateObject("ADODB.Connection") Set rs = Server.Cr

我过去经常使用经典的asp。我目前正在尝试ASP.NET MVC 到目前为止我很喜欢它,但是我错过了ADODB连接的简单用法。 我在网上搜索任何简单明了的解决方案,如下面的代码, 在经典的ASP上使用,但我发现的一切都要复杂得多,而且/或者没有 C#上的ADODB。我想要记录集,不需要“更新..”SQL,列(“名称”)而不是列[0],等等 在…上这一切都过去了吗

Set db = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
db.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("data.mdb")
rs.Open "select * from test;", db, 1, 3 
rs.AddNew
rs("text") = "Hello World!"
rs.Update
rs.Close
db.Close
Set rs = Nothing   
Set db = Nothing
我知道有对象映射器等。。。但是我想用老式的方式使用ADODB连接记录集。所以,请不要使用它,它太旧或太慢等。我知道这些事情。是否仍然可能,是否有任何简单的代码工作示例


谢谢。

不用了,你只需要使用COM互操作就可以了

您可以填充数据集并使用它。有关说明,请参见以下OleDB教程:


我不知道当事情已经转移到.net中时,为什么要使用ADODB.Recordset

话虽如此,您可以将操作包装到基于VB的Activex DLL中,并使用COM互操作对DLL进行调用

e、 g.您提到的更新可以包装到VB6中公共类的方法中。
制作一个activex DLL。从.net代码中使用(添加引用)Activex DLL


通过这样做,特定于COM的事情可以在一个边界中自行处理,而.net不需要管理您在代码中创建的所有COM类实例的生命周期。

通过在这里学习新技术(如Linq2Sql),您的生命将大大简化。写ADO.NET代码真的没有什么意义了,别管ADO.old代码了。

你打算做的事情就像走进法拉利的展厅,要求买一辆新车,然后马上扔掉引擎,换上一堆10万英里长的老爷车。这(在我看来)由于您似乎更喜欢在经典ASP中创建记录集来执行简单的更新而进一步加剧。多年前,即使在经典的ASP中,也不鼓励这种做法

如果您忘记了记录集的概念,并让SQL使用“UPDATE MyTable SET x=etc…”,那么在ASP.NET中使用Access实际上是非常容易的。以下是一些使用ADO.NET和Access进行简单操作的清晰示例:


鉴于您的背景,ASP.NET MVC是您的最佳选择。我敦促您花点额外的精力学习ADO.NET,并使用它来代替经典的ADO。你把你的大脚趾头伸进了新的水域。是时候让你屏住呼吸,一路走下去了;o)

对于任何希望找出ASP.NET中连接数据库的“缺失”元素的程序员来说,您所尝试的是一项可以接受的壮举。真正的问题是ASP.NET“隐藏”了实现细节以及使用的语法和过程的细节。我通过“艰难之路”发现了(艰难之路…我自己,由于缺乏在ASP.NET中编写编程代码的合理、绝对正确的方法/过程),这是通过检查书籍和互联网上的(无帮助的)代码示例,通过对问题的批判性思考,以及,通过我的经验,用C++、VB5、VB6和VB.NET(框架1)编程语言。 访问MS Access(2000)DB以与IIS 6上的ASP.NET 1.1引擎交互的正确代码为:

--在MAIN.aspx页面的pre-HTML(在HTML Doctype贴花或元素标记之前)/ASP.NET脚本部分(没有代码隐藏文件),您应该具有:

<%@ Page Language="VB" Debug="True" EnableViewState="True" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">
  Sub Page_Load(sender as Object, e as EventArgs)

   If Not Page.IsPostBack
      BindData() ' Only binds the data on the first page load
   End If
  End Sub


'''''''******BEGIN OF DB DATA DISLAY IN DATAGRID
  Sub BindData()
    '1. Create a connection
    Const strConnStr as String = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=c:\inetpub\protected\Comments.mdb"
    Dim objConn as New OleDbConnection(strConnStr)
    objConn.Open()

'2. Create a command object for the query
    Const strSQL as String = "SELECT ID, Ethnicity, Username, Comments FROM tblMsgNotes"
    Dim objCmd as New OleDbCommand(strSQL, objConn)

'3. Create/Populate the DataReader
    Dim objDR as OleDbDataReader
    objDR = objCmd.ExecuteReader()    

    dgComments.DataSource = objDR
    dgComments.DataBind()   
  End Sub
'''''''******END OF DB DATA DISLAY IN DATAGRID


'''*************BEGIN OF EDIT, UPDATE, CANCEL BUTTONS
'Sub dgComments_Edit(sender As Object, e As DataGridCommandEventArgs)
'    dgComments.EditItemIndex = e.Item.ItemIndex
'    BindData()
'End Sub

'Sub dgComments_Cancel(sender As Object, e As DataGridCommandEventArgs)
'    dgComments.EditItemIndex = -1
'    BindData()
'End Sub

'Sub dgComments_Update(sender As Object, e As DataGridCommandEventArgs)
'   'Read in the values of the updated row
'   Dim usrID00 as Integer = e.Item.Cells(1).Text
'   Dim strethnic00 as String = CType(e.Item.Cells(2).Controls(0), TextBox).Text
'   Dim strusrname00 as String = CType(e.Item.Cells(3).Controls(0), TextBox).Text
'   Dim strcommnts00 as String = CType(e.Item.Cells(4).Controls(0), TextBox).Text
''Construct the SQL statement using Parameters
'    Dim strSQL as String = _
'      "UPDATE [tblMsgNotes] SET [Ethnicity] = @ethnic00, " & _
'      "[Username] = @usrname00, [Comments] = @commnt00 " & _
'      "WHERE [ID] = @usrID"

'    Const strConnString as String = _
'       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\protected\Comments.mdb"
'    Dim objConn as New OleDbConnection(strConnString)
'    objConn.Open()

'    Dim myCommand as OleDbCommand = new OleDbCommand(strSQL, objConn)
'    myCommand.CommandType = CommandType.Text'

'    ' Add Parameters to the SQL query
''    Dim parameterProdName as OleDbParameter = _
''               new OleDbParameter("@ProdName", OleDbType.VarWChar, 75)
''    parameterProdName.Value = strName
''    myCommand.Parameters.Add(parameterProdName)'


'    Dim parameterethnic00 as OleDbParameter = _
'               new OleDbParameter("@ethnic00", OleDbType.VarWChar, 75)
'    parameterethnic00.Value = strethnic00
'    myCommand.Parameters.Add(parameterethnic00)'


''    Dim parameterUnitPrice as OleDbParameter = _
''               new OleDbParameter("@UnitPrice", OleDbType.Currency)
''    parameterUnitPrice.Value = dblPrice
''    myCommand.Parameters.Add(parameterUnitPrice)


'    Dim parameterusrname00 as OleDbParameter = _
'               new OleDbParameter("@usrname00", OleDbType.VarWChar, 75)
'    parameterusrname00.Value = strusrname00
'    myCommand.Parameters.Add(parameterusrname00)


''    Dim parameterProdDesc as OleDbParameter = _
''               new OleDbParameter("@ProdDesc", OleDbType.VarWChar)
''    parameterProdDesc.Value = strDesc
''    myCommand.Parameters.Add(parameterProdDesc)


'    Dim parametercommnts00 as OleDbParameter = _
'               new OleDbParameter("@commnts00", OleDbType.VarWChar, 75)
'    parametercommnts00.Value = strcommnts00
'    myCommand.Parameters.Add(parametercommnts00)


''    Dim parameterProdID as OleDbParameter = _
''               new OleDbParameter("@ProductID", OleDbType.Integer)
''    parameterProdID.Value = iProductID
''    myCommand.Parameters.Add(parameterProdID)


'    Dim parameterusrID00 as OleDbParameter = _
'               new OleDbParameter("@usrID00", OleDbType.Integer)
'    parameterusrID00.Value = usrID00
'    myCommand.Parameters.Add(parameterusrID00)



'    myCommand.ExecuteNonQuery()   'Execute the UPDATE query








'    objConn.Close()   'Close the connection

'    'Finally, set the EditItemIndex to -1 and rebind the DataGrid
'    dgComments.EditItemIndex = -1
'    BindData()
'End Sub

'''*************END OF EDIT, UPDATE, CANCEL BUTTONS
</script>
<%
 'removed from dgComments DataGrid :
'    EditItemStyle-BackColor="#faebd2"
'    OnEditCommand="dgComments_Edit"
'    OnUpdateCommand="dgComments_Update"
'    OnCancelCommand="dgComments_Cancel" %>

<% 'removed from the inner 'BoundColumns' section of the DataGrid
'     <asp:EditCommandColumn EditText="Edit Info"
'          ButtonType="PushButton"
'          UpdateText="Update" CancelText="Cancel" /> %>

<form id="csvinvA2" runat="server">
<asp:DataGrid id="dgComments" runat="server"
    AllowSorting="True"
    ItemStyle-BackColor="#22e4eb"
    AlternatingItemStyle-BackColor="#ffffff"
    AutoGenerateColumns="False" CellPadding="4"
    HeaderStyle-BackColor="Black"
    HeaderStyle-ForeColor="White"
    HeaderStyle-HorizontalAlign="Center"
    HeaderStyle-Font-Bold="True">
    <Columns>

        <asp:BoundColumn HeaderText="ID" DataField="ID" 
             ReadOnly="True"/>
        <asp:BoundColumn HeaderText="Ethnic Group" DataField="Ethnicity"
                ItemStyle-HorizontalAlign="Right"/>
        <asp:BoundColumn HeaderText="Name" DataField="Username" />
        <asp:BoundColumn HeaderText="Comment"
                DataField="Comments" />
    </Columns>
</asp:DataGrid>

</form>

子页面加载(发送方作为对象,e作为事件参数)
如果不是第页,则返回第页
BindData()'仅绑定加载第一页时的数据
如果结束
端接头
开始在DATAGRID中显示数据库数据
子绑定数据()
“1.创建连接
Const strConnStr as String=“Provider=Microsoft.Jet.OleDb.4.0;数据源=c:\inetpub\protected\Comments.mdb”
Dim objConn作为新的OLEDB连接(strConnStr)
objConn.Open()
'2.为查询创建命令对象
Const strSQL as String=“从tblMsgNotes中选择ID、种族、用户名和注释”
Dim objCmd作为新的OleDbCommand(strSQL,objConn)
'3.创建/填充数据读取器
作为OLEDB数据读取器的Dim objDR
objDR=objCmd.ExecuteReader()
dgComments.DataSource=objDR
dgComments.DataBind()
端接头
DATAGRID中的DB数据显示结束
''**********开始编辑、更新、取消按钮
'子dgComments_Edit(发件人作为对象,e作为DataGridCommandEventArgs)
'dgComments.EditItemIndex=e.Item.ItemIndex
'BindData()
'末端接头
'子dgComments_Cancel(发件人作为对象,e作为DataGridCommandEventArgs)
'dgComments.EditItemIndex=-1
'BindData()
'末端接头
'Sub-dgComments_更新(发件人作为对象,e作为DataGridCommandEventArgs)
“”已读入更新行的值
'Dim usrID00 as Integer=e.Item.Cells(1).Text
'Dim strethnic00 as String=CType(例如,项。单元格(2)。控件(0),文本框)。文本
'Dim strusrname00 as String=CType(例如,项。单元格(3)。控件(0),文本框)。文本
'Dim strcommnts00 as String=CType(例如,项。单元格(4)。控件(0),文本框)。文本
''使用参数构造SQL语句
'作为字符串的Dim strSQL=_
“更新[tblMsgNotes]设置[种族]=@ethnic00,”_
“[Username]=@usrname00,[Comments]=@commnt00”&_
“[ID]=@usrID”
'常量strConnString作为字符串=_
““Provider=Microsoft.Jet.OLEDB.4.0;数据源=C:\inetpub\protected\Comments.mdb”
'Dim objConn作为新的OLEDB连接(strConnString)
'objConn.Open()
'Dim myCommand as OleDbCommand=新的OleDbCommand(strSQL,objConn)
'myCommand.CommandType=CommandType.Text'
“”将参数添加到SQL查询
“”作为OleDbParameter的Dim参数terProdName=_
''