运行查询,获取值,然后更新ASP.net中的记录(VB)

时间:2011-07-14 01:05:30

标签: asp.net vb.net ado.net

老实说,我真的很想学习这些东西。我已经使用经典ASP多年,只是切换到.net。到目前为止,我没有太多乐趣,但我正在努力,我不会放弃。我正在努力的一小部分是运行查询,然后更新记录。即使是谷歌搜索的例子,我很难搞清楚如何做一些简单的事情:

    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)中执行上面的代码,或者给我一个关于如何做到这一点的非常好的全面教程。 提前谢谢。

4 个答案:

答案 0 :(得分:1)

啊..首先关闭 - 你正在尝试用.net做经典的vb。 报废它。没有更多的游标。它的客户端数据基本上可以返回数据集或数据读取器(或单个值)

粗略地看: http://msdn.microsoft.com/en-us/library/bh8kx08z%28v=VS.100%29.aspx

他们错过了他们获得连接的地方,基本上就是这样 Dim连接为New SqlConnection(“server = localhost; uid = username; 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/

不同之处在于数据集在客户端加载了所有数据。与ado的服务器端游标相比有点不同。 当你滚动它们时,DataReader会对结果进行流式处理 - 在内存中形成这个大型数据集的开销并不存在,所以它的速度要快一些。

希望这能让你开始 - 记住SCRAP ADO的东西。它不再使用了。

答案 1 :(得分:0)

检查this link是否对VB.Net中的MS Access数据库执行SQL命令。

答案 2 :(得分:0)

正如NoAlias告诉你的那样,但请注意使 错误开始。 忘记在SQL中插入文本,记住引号必须加倍,等等。

尝试参数化的sql语句,如下例所示:

我有一个包含4个colunms的表,CollCode和CollSeq是关键,TermType和TermText是可修改的数据  该代码解释了如何插入,更新或删除带有参数instaed的行,如果SQL中有textvalues。  该代码仅对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

答案 3 :(得分: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()

感谢大家提供完成此任务的线索。

相关问题