【问题标题】:Paramterising an SQL SELECT statement参数化 SQL SELECT 语句
【发布时间】:2016-07-21 10:26:11
【问题描述】:

我最近一直在对我的 SQL 语句进行参数化处理,并且已经成功地为我的 INSERT、UPDATE 和 DELETE 查询这样做了。但是,我正在努力使用SELECT... 有人可以帮助我吗?我觉得是因为我使用的是OleDbDataAdapter,而不是OleDbCommand?

    Public Shared Function getPerson(ByVal personID As Integer, m_cn As OleDbConnection)

    Dim Dt As New DataTable

    Dim Da As New OleDbDataAdapter
    Da = New OleDbDataAdapter("SELECT * FROM tblPerson WHERE personID = " & personID, m_cn)

    Da.Fill(Dt)

    Return Dt

End Function

【问题讨论】:

    标签: sql vb.net parameters parameterized


    【解决方案1】:

    OleDbDataAdapter.SelectCommand 具有用于选择记录的 SQL 语句(或存储过程)的参数:

    Using da = New OleDbDataAdapter("SELECT * FROM tblPerson WHERE personID = @PersonID", m_cn)
        da.SelectCommand.Parameters.Add("@PersonID", OleDbType.Integer).Value = personID
        Da.Fill(Dt)
    End Using
    

    我建议不要重用连接(或将其设为静态/共享),因为这会导致各种问题。而是在需要的地方创建、打开和使用它,因此在此方法中,最好使用Using 语句来确保即使出现错误也能关闭它。

    【讨论】:

    • 嗨蒂姆,我把这个语句放在Dim Da As New OleDbAdapter 和Da.Fill(Dt) 行之间(在取出原始SQL 行之后),我收到一个错误,说Variable 'Da' hides a variable in an enclosing block in Using Da.. . 有什么想法吗?
    • @Joe:您不再需要声明适配器,因为它是在Usingstatement 中创建的。它是封闭的,并在它的末端被放置。你想用它做的所有事情都属于Using。请记住将Using-statement 用于实现IDisposable(除了少数例外,如DataTable/DataSet)且不包含非托管资源的任何内容。
    • '必须声明标量变量“@PersonID”。'改成这样后新的错误是什么?
    • @Joe:你看到我修改了你的查询吗?
    • 是的,我直接从你的回答中复制粘贴的那个(刚刚又做了一次),仍然返回同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多