如何查询VB.NET数据源

时间:2011-09-20 16:50:45

标签: sql vb.net visual-studio visual-studio-2010 ms-access

我已将Datasoruce添加到我当前的项目中,以下内容已添加到我的App.config文件中:

<connectionStrings>
        <add name="WindowsApplication1.My.MySettings.dbConnectionString"
            connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb"
            providerName="System.Data.OleDb" />
    </connectionStrings>

我现在如何查询和更新此数据源?

我有以下查询:

Dim sqlstr As String = "INSERT INTO Accounts(Username,Password)VALUES('" & Trim(Account(0)) & "','" & Trim(Account(1)) & "')"

但我不太确定如何实际运行查询(VB新手,用于PHP和单个数据库连接文件!)

1 个答案:

答案 0 :(得分:4)

  

我现在如何查询和更新此数据源?

你现在是怎么做的!

该代码存在两个巨大问题:

  1. 永远不要使用字符串连接将值插入到这样的sql语句中。
  2. 永远不要将密码作为纯文本存储在数据库中。
  3. 有零的案例,其中任何一个都是可以接受的。

    这可能是它的一种方式:

    Dim sql As String = "INSERT INTO Account (UserName, PasswordHash) VALUES ( ? , ? )"
    Using cn As New OleDbConnection(ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString), _
          cmd As New OleDbCommand(sql, cn)
    
        cmd.Parameters.Add("UserName", OleDbType.VarChar, 50).Value = Account(0).ToString().Trim()
        cmd.Parameters.Add("PasswordHash", OleDbType.Char, 20).Value = HashPassword(Account(1).ToString().Trim())
    
        cn.Open()
        cmd.ExecuteNonQuery()
    End Using
    

    请注意,我更改了其中一个列的名称,并且我引用了一个尚不存在的HashPassword()函数。您需要构建自己的HashPassword()函数以使用该代码。构建函数时,请查找要使用的scrypt或bcrypt函数。不要使用MD5。 .Net内置的最好的是SHA1。如果你真的必须去那条路线(SHA1)你可以,但scrypt或bcrypt是首选(这就是为什么我没有为你提供这个功能:它将依赖于你必须首先使用的其他代码从网上获取)。

    当您对用户进行身份验证时,必须使用相同的函数来散列尝试的密码,并比较哈希值而不是原始密码。这是唯一安全的方法。