2011-07-14 16 views
2

誠實,我真的想學習這個東西。我一直使用傳統的ASP多年,只是切換到.net。到目前爲止,我沒有太多樂趣,但我正在嘗試,我不會放棄。我正在努力處理的一小部分是運行查詢,然後更新記錄。即使google搜索的例子,我有一個艱難的時間搞清楚如何做這樣簡單的東西:運行查詢,獲取一個值,然後更新記錄在ASP.net(VB)

 
    Set objRS = Server.CreateObject ("ADODB.RecordSet")

ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=G:\Inetpub\wwwroot\TestPage\TheData\TestData.mdb;" & _ 
      "Persist Security Info=False" 

SqlStr = "SELECT * " & _ 
     "FROM Techs " & _ 
     "WHERE UserID = " & UserID & " " 

objrs.Open SqlStr, ConStr, adOpenStatic, adLockOptimistic,adCmdText 
If Objrs.recordCount <> 0 Then 
    TechUserName = Objrs("TechUserName") 
    Objrs.Update 
     Objrs("LastLogin") = Now() 
    Objrs.Update 
Else 
    Objrs.AddNew 
     Objrs("UserID") = UserID 
    Objrs.Update 
End If 
Objrs.Close 

Set objRS = Nothing 

它甚至有可能?有人可以幫助我在ASP.net(VB)中執行上述代碼,或者指出我有關如何執行此操作的非常好的徹底教程。 在此先感謝。

+0

如果要顯示多個記錄並插入/編輯/刪除它們,可以使用ASP.Net的GridView使用SqlDataSource。如果你想找什麼,我可以上傳更多。 http://www.asp.net/general/videos/lesson-8-working-with-the-gridview-and-formview – Win

+0

這與經典asp比vb.net更有共同之處 –

回答

0

嗚呼我明白了!

Dim SqlStr As String 
Dim ConStr As String = ConfigurationManager.ConnectionStrings("TCConStr").ConnectionString 

SqlStr = "SELECT * " & _ 
     "FROM TechUsers " & _ 
     "WHERE TechWWID = " & Chr(34) & TechWWID & Chr(34) & " " & _ 
     "AND TechEmplNum = " & TechEmplNum & " " 

Dim CN As OleDbConnection = New OleDbConnection(ConStr) 
CN.Open() 
Dim DA As OleDbDataAdapter = New OleDbDataAdapter(SqlStr, CN) 
Dim DS As New DataSet 
DA.Fill(DS, "TechUsers") 
Dim DT As DataTable = DS.Tables("TechUsers") 
Dim RecCount As Integer = DT.Rows.Count 
Dim CB As OleDbCommandBuilder = New OleDbCommandBuilder(DA) 

If RecCount = 0 Then 
    DA.InsertCommand = CB.GetInsertCommand() 
    Dim DR As DataRow = DT.NewRow() 
    DR("TechName") = TechName 
    DR("TechWWID") = TechWWID 
    DR("TechEmplNum") = TechEmplNum 
    DR("FirstLogin") = Date.Now() 
    DR("LastLogin") = Date.Now() 
    DR("LoginCount") = 1 
    DT.Rows.Add(DR) 
    DA.Update(DS, "TechUsers") 
Else 
    Dim DR As DataRow = DT.Rows(0) 
    Dim LoginCount As Integer = DR("LoginCount") 
    TestStuff.InnerHtml = TestStuff.InnerHtml & "<br > " & LoginCount 
    DA.UpdateCommand = CB.GetUpdateCommand() 
    DR("LastLogin") = Date.Now() 
    DR("LoginCount") = LoginCount + 1 
    DA.Update(DS, "TechUsers") 
End If 

CN.Close() 

感謝大家的線索完成這件事。

1

啊..首先 - 你正試圖用.net做經典的vb東西。 將其廢棄。沒有更多的遊標。它的客戶端數據,你基本上取回的數據集或數據讀取器(或單個值)

大致參見: http://msdn.microsoft.com/en-us/library/bh8kx08z%28v=VS.100%29.aspx

他們想念他們得到的連接點,這基本上是 暗淡連接作爲新的SqlConnection( 「服務器=本地主機; UID =用戶名; PWD = whatver;」)

確保您處理一切的完成 connection.Dispose()

時,一旦你有你的數據集回 - 只要( c#語法)

 
foreach(DataRow row in yourDataSet.Tables[0].Rows) 
{ 
    Debug.WriteLine(row["YourFieldName"]) 
} 

對於數據讀取器,請參閱: http://www.developerfusion.com/article/4278/using-adonet-with-sql-server/2/

所不同的是一個數據集具有加載在客戶端的所有數據。與服務器端的光標東西有點不同。 DataReader會在您滾動瀏覽結果時對結果進行流式處理 - 在內存中形成這個大型數據集的開銷不大,因此速度更快。

希望這可以讓你開始 - 記住碎片的ADO的東西。它不再使用。

+0

我意識到我忘了'編輯'部分。看到這篇文章 - 你基本上只是使用UpdateCommand併發回數據。 http://support.microsoft.com/kb/301248 –

0

檢查this link在VB.Net中執行鍼對MS Access數據庫的SQL命令。

0

按照NoAlias告訴你的方式,但要小心而不是作出錯誤的開始。 忘記插入文本您的SQL,請記住,報價必須加倍等

嘗試參數化的SQL語句,像這樣的樣品中:

我有一個表4個colunms,CollCode和CollSeq是關鍵,TermType和TermText是可修改的數據 該代碼解釋瞭如何插入,更新或刪除具有參數instaed的行,如果SQL中的文本值。 該代碼是隻適用於ACCESS,SQL SERVER或MySQL需要爲模板不同的代碼,並且具有不同DbTypes

在程序的第一部分

:在程序的處理部

 ' select 
    Dim SQLaxSelect As String = "SELECT DISTINCT CollSeq FROM SearchTerms WHERE CollCode = ? ORDER BY CollSeq" 
    Dim DRaxSelect As OleDbDataReader = Nothing 
    Dim DCaxSelect As OleDbCommand 
    Dim axSelP1 As New OleDbParameter("@CollCode", OleDbType.VarChar, 4) 
    DCaxSelect = New OleDbCommand(SQLaxSelect, DbConn) 
    DCaxSelect.Parameters.Add(axSelP1) 


    ' Insert 
    Dim DbConn As New OleDbConnection(SqlProv) 
    Dim SQLTwInsert As String = "INSERT INTO SearchTerms (CollCode, CollSeq, TermType, TermText) VALUES (?, ?, ?, ?)" 
    Dim DRTwInsert As OleDbDataReader = Nothing 
    Dim DCCTwInsert As OleDbCommand 
    Dim TwInsP1 As New OleDbParameter("@CollCode", OleDbType.VarChar, 4) 
    Dim TwInsP2 As New OleDbParameter("@CollSeq", OleDbType.Integer, 4) 
    Dim TwInsP3 As New OleDbParameter("@TermType", OleDbType.VarChar, 4) 
    Dim TwInsP4 As New OleDbParameter("@TermText", OleDbType.VarChar, 255) 
    DCCTwInsert = New OleDbCommand(SQLTwInsert, DbConn) 
    DCCTwInsert.Parameters.Add(TwInsP1) 
    DCCTwInsert.Parameters.Add(TwInsP2) 
    DCCTwInsert.Parameters.Add(TwInsP3) 
    DCCTwInsert.Parameters.Add(TwInsP4) 

    ' Delete 
    Dim SQLTwDelete As String = "DELETE FROM SearchTerms WHERE CollCode = ? AND CollSeq = ? AND TermType = ? AND TermText = ?" 
    Dim DRTwDelete As OleDbDataReader = Nothing 
    Dim DCCTwDelete As OleDbCommand 
    Dim TwDelP1 As New OleDbParameter("@CollCode", OleDbType.VarChar, 4) 
    Dim TwDelP2 As New OleDbParameter("@CollSeq", OleDbType.Integer, 4) 
    Dim TwDelP3 As New OleDbParameter("@TermType", OleDbType.VarChar, 4) 
    Dim TwDelP4 As New OleDbParameter("@TermText", OleDbType.VarChar, 255) 
    DCCTwDelete = New OleDbCommand(SQLTwDelete, DbConn) 
    DCCTwDelete.Parameters.Add(TwDelP1) 
    DCCTwDelete.Parameters.Add(TwDelP2) 
    DCCTwDelete.Parameters.Add(TwDelP3) 
    DCCTwDelete.Parameters.Add(TwDelP4) 

    ' Update 
    Dim SQLTwUpdate As String = "UPDATE SearchTerms SET TermType = ?, TermText = ? WHERE CollCode = ? AND CollSeq = ? AND TermType = ? AND TermText = ?" 
    Dim DRTwUpdate As OleDbDataReader = Nothing 
    Dim DCCTwUpdate As OleDbCommand 
    Dim TwUpdP1 As New OleDbParameter("@TermType", OleDbType.VarChar, 4) 
    Dim TwUpdP2 As New OleDbParameter("@TermText", OleDbType.VarChar, 255) 
    Dim TwUpdP3 As New OleDbParameter("@CollCode", OleDbType.VarChar, 4) 
    Dim TwUpdP4 As New OleDbParameter("@CollSeq", OleDbType.Integer, 4) 
    Dim TwUpdP5 As New OleDbParameter("@oldTermType", OleDbType.VarChar, 4) 
    Dim TwUpdP6 As New OleDbParameter("@oldTermText", OleDbType.VarChar, 255) 
    DCCTwUpdate = New OleDbCommand(SQLTwUpdate, DbConn) 
    DCCTwUpdate.Parameters.Add(TwUpdP1) 
    DCCTwUpdate.Parameters.Add(TwUpdP2) 
    DCCTwUpdate.Parameters.Add(TwUpdP3) 
    DCCTwUpdate.Parameters.Add(TwUpdP4) 
    DCCTwUpdate.Parameters.Add(TwUpdP5) 
    DCCTwUpdate.Parameters.Add(TwUpdP6) 

 'select 
        axSelP1.Value = requested key value CollCode 
        Try 
         DRaxSelect = DCaxSelect.ExecuteReader() 
         Do While (DRaxSelect.Read()) 
          'get value, first SELECTed value has index 0 
          CollSeq = GetDbIntegerValue(DRaxSelect, 0) ' routine to convert NULL in 0 
         Loop 
        Catch ex As Exception 
         your type of report exception 
        Finally 
         If Not (DRaxSelect Is Nothing) Then 
          DRaxSelect.Dispose() 
          DRaxSelect.Close() 
         End If 
        End Try 

     ' Update 
        TwUpdP1.Value = new value TermType 
        TwUpdP2.Value = new value TermText 
        TwUpdP3.Value = key value CollCode 
        TwUpdP4.Value = key value CollSeq 
        TwUpdP5.Value = old value TermType to avoid updating a row that 1 millisecond earlier was modified by someone else 
        TwUpdP6.Value = old value TermText 
        Try 
         DRTwUpdate = DCCTwUpdate.ExecuteReader() 
        Catch ex As Exception 
         your type of report exception 
        Finally 
         If Not (DRTwUpdate Is Nothing) Then 
          DRTwUpdate.Dispose() 
          DRTwUpdate.Close() 
         End If 
        End Try 

    ' Insert 
        TwInsP1.Value = new key value CollCode 
        TwInsP2.Value = new key value CollSeq 
        TwInsP3.Value = value TermType 
        TwInsP4.Value = value TermText 
        Try 
         DRTwInsert = DCCTwInsert.ExecuteReader() 
        Catch ex As Exception 
         your type of report exception 
        Finally 
         If Not (DRTwInsert Is Nothing) Then 
          DRTwInsert.Dispose() 
          DRTwInsert.Close() 
         End If 
        End Try 
    ' Delete 
        TwDelP1.Value = key value CollCode 
        TwDelP2.Value = key value CollSeq 
        TwDelP3.Value = old value TermType to avoid deleting a row that 1 millisecond earlier was modified by someone else 
        TwDelP4.Value = old value TermText 
        Try 
         DRTwDelete = DCCTwDelete.ExecuteReader() 
        Catch ex As Exception 
         your type of report exception 
        Finally 
         If Not (DRTwDelete Is Nothing) Then 
          DRTwDelete.Dispose() 
          DRTwDelete.Close() 
         End If 
        End Try 

我的例行程序(在一個模塊)

Friend Function GetDbIntegerValue(ByVal Dr As OleDbDataReader, ByVal nr As Integer) As Integer 
    If IsDBNull(Dr.Item(nr)) Then 
     Return 0 
    Else 
     Return Dr.GetInt32(nr) 
    End If 
End Function 
相關問題