Использование Access DB (.mdb) с ADODB в C # (ASP.MVC), как с Classic ASP - PullRequest
2 голосов
/ 05 октября 2009

Раньше я много работал с классическим жерехом. В настоящее время я пытаюсь ASP.NET MVC и пока это нравится, но мне не хватает простого использования ADODB Connection. Я искал в Интернете какое-то простое и понятное решение, подобное приведенному ниже коду, используется на классическом ASP, но все, что я нашел, было намного сложнее и / или не с ADODB на C #. Я хочу наборы записей, никаких SQL-файлов "UPDATE ..", Column ("Name"), а не Column [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

Я знаю, что есть ObjectMappers и т. Д. Но я хотел бы использовать соединение ADODB с наборами записей по старинке. Поэтому, пожалуйста, не дайте ответа, не используйте его, он старый или медленный и т. Д. Я знаю об этих вещах. Это все еще возможно, и есть ли простой рабочий пример с кодом.

Спасибо.

Ответы [ 6 ]

3 голосов
/ 09 октября 2009

То, что вы предлагаете сделать, похоже на то, как вы зашли в демонстрационный зал Ferrari и попросили купить новую машину, а затем быстро выбросили двигатель и заменили его старой кучей из 10-летней машины с пробегом 100 000 миль. Часы. Это (на мой взгляд) еще более усугубляется тем фактом, что вы предпочитаете создавать наборы записей в классическом ASP для выполнения простого обновления. Эта практика не поощрялась много лет назад даже в рамках классического ASP.

Работа с Access в ASP.NET на самом деле довольно проста, если вы забудете о концепции RecordSet и действительно заставите SQL использовать «UPDATE MyTable SET x = etc ...». Здесь приведены некоторые понятные примеры простых операций с использованием ADO.NET и Access: http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

ASP.NET MVC - отличный выбор для вас, учитывая ваше прошлое. Я призываю вас приложить немного дополнительных усилий для изучения ADO.NET и использовать его также вместо классического ADO. Вы положили свой большой палец в новые воды. Время задержать дыхание и пройти весь путь; о)

2 голосов
/ 13 декабря 2012

То, что вы пытаетесь сделать, является приемлемым умением для любого программиста, который хочет выяснить «недостающие» элементы того, как подключиться к базе данных в ASP.NET. Проблема в том, что ASP.NET «скрывает» детали реализации и детали используемого синтаксиса и процессов. Я выяснил (трудный путь ... сам по себе, из-за отсутствия разумно, абсолютно правильной методологии / процессов написания программного кода в ASP.NET) путем «трудного пути», который заключается в проверке (бесполезные) примеры кода в книгах и в Интернете через критическое размышление о проблеме и, к счастью, благодаря моему опыту работы с языками программирования C ++, VB5, VB6 и VB.NET (Framework 1.0).

Правильный код для доступа к БД MS Access (2000) для взаимодействия с механизмом ASP.NET 1.1 в IIS 6:

- В пре-HTML (перед декализацией HTML-тега Doctype или тегом элемента) / в разделе сценария ASP.NET на странице MAIN .aspx (без кода в файле) вы должны иметь:

<%@ 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>

- В разделе формы главной страницы .aspx (без кода файла) вы должны иметь:

<%
 '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>

Я процитировал пункты подпрограммы функциональности Edit, Update и Cancel так, чтобы у вас была только базовая реализация интерфейса '' VIEW '', если вы собираетесь продолжать изучать внутреннюю работу доступа и манипулирования MS Access База данных 2000 с ASP.NET 1.1 или выше, я предлагаю вам снять отметки комментариев в приведенном выше примере и проанализировать код, чтобы лучше понять, что происходит в движке ASP.NET 1.x под IIS.

В ASP.NET MVC я не уверен в фактическом размещении в документе страницы, который будет создан, но по большей части это должно помочь вам «встать на путь», чтобы понять, что происходит с ASP. NET и MS Access (2000). Если вы хотите использовать другие версии Access DB, отличные от Access 2000/2003, вам нужно изменить '' Jet call '' на правильное 'Jet versioning', чтобы страница .aspx могла подключаться к Access DB и анализировать / вызвать внутреннюю часть этой новой версии файла БД Access.

2 голосов
/ 05 октября 2009

Вы можете заполнить DataSet и работать с этим. См. Следующее руководство OleDB для объяснения:

http://msdn.microsoft.com/en-us/library/aa288452(VS.71).aspx

0 голосов
/ 05 октября 2009

Ваша жизнь была бы значительно упрощена благодаря использованию здесь новых технологий, таких как Linq2Sql. На самом деле больше нет смысла писать код ADO.NET, не говоря уже о коде ADO.old.

0 голосов
/ 05 октября 2009

Я не уверен, почему вы захотите использовать ADODB.Recordset, когда все переместилось в .net?

Сказав это, вы можете обернуть свои операции в ActiveX DLL на основе VB и с COM-взаимодействием совершать вызовы в вашу DLL.

например. Упомянутое вами обновление может быть включено в метод вашего открытого класса в VB6.
Сделайте из него ActiveX DLL. Поглотить (добавить ссылку) в Activex DLL из вашего кода .net.

Делая это, конкретные вещи COM обрабатываются сами по себе, и .net не нужно управлять жизнью всех экземпляров класса COM, которые вы создаете в своем коде.

0 голосов
/ 05 октября 2009

Нет, это все, вам просто нужно использовать COM-взаимодействие, чтобы добраться до него. Смотрите здесь как

...