如何保存输入值?

时间:2009-12-16 10:55:46

标签: vb.net

使用VB.Net

数据库表单

Server Name, Username, Password - textbox
SQL Authentication, windows Authentication - checkbox

我有数据库表单,第一次运行我的软件,我必须提供服务器名称,窗口或SQL身份验证模式,用户名和密码。下次我运行软件时,给定的数据如服务器名称,用户名,密码,窗口或sql身份验证应该出现在表单中。

在我使用VB6之前,我使用ini文件获取用户名,密码和服务器名。

vb6代码。

Dim File As String, OFLen As Double, str As String
File = App.Path & "\SQLServer.ini"
OFLen = FileLen(File)
SName = ReadIni(File, "Server", "ServerName")
UName = ReadIni(File, "UserName", "UName")
PWord = ReadIni(File, "Password", "PWord")

Dim ConnectionString As String
Set DLTConn = New ADODB.Connection
ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI; Persist Security Info=False;Initial Catalog=database1;Data Source=" & SName & ""
DLTConn.Open ConnectionString

vb.net中有任何可用于保存数据的选项,或者我必须在vb.net中使用相同的格式(ini文件)

需要vb.net代码帮助。

2 个答案:

答案 0 :(得分:2)

这些说明假定VB2008,但我相信2010年是类似的。

正如@treaschf所说,在解决方案资源管理器中右键单击您的项目并选择属性。如果弹出一个标题为“解决方案”...“属性页”的窗口,则单击解决方案而不是项目。在属性窗口中,单击“设置”。在名称列中输入“用户名”,将类型保留为String,将范围保留为User,将值保留为空(除非您要输入默认值)。对要存储的每个属性重复此操作。这些步骤会自动创建您可以使用My.Settings ..

访问的变量

所以在您的代码隐藏中,您可以这样做:

My.Settings.Username = "bob"

Dim username as String = My.Settings.Username

我相信设置会在退出时自动保存,但我建议您在更新后进行显式调用以防万一。

My.Settings.Save()

所以这几乎和你以前的INI文件一样。但是像@treaschf所说的那样,在保存到磁盘时你应该真正加密密码。以下是此处的常规修改版本。 http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx。我删除了System.Security.SecureString,因为它很好,它也使生活更复杂。将Entropy的值更改为您想要的任何值,调用Encrypt(string)来加密您的文本,并调用Decrypt(string)来解密它。这使用DPAPI,因此您不必担心弄乱注册表,权限和其他所有内容。

Private Shared entropy As Byte() = System.Text.Encoding.Unicode.GetBytes("Enter some text here for entropy")
Public Shared Function EncryptString(ByVal text As String) As String
    Dim data = System.Security.Cryptography.ProtectedData.Protect(System.Text.Encoding.Unicode.GetBytes(text), _
                                                                     entropy, _
                                                                     System.Security.Cryptography.DataProtectionScope.CurrentUser)
    Return System.Convert.ToBase64String(data)
End Function
Public Shared Function DecryptString(ByVal encryptedData As String) As String
    Dim data As Byte() = System.Security.Cryptography.ProtectedData.Unprotect(System.Convert.FromBase64String(encryptedData), _
                                                                                  entropy, _
                                                                                  System.Security.Cryptography.DataProtectionScope.CurrentUser)
    Return System.Text.Encoding.Unicode.GetString(data)
End Function

然后把它们放在一起:

        My.Settings.Username = EncryptString("bob")

    Dim username As String
    If Not String.IsNullOrEmpty(My.Settings.Username) Then
        Try
            username = DecryptString(My.Settings.Username)
        Catch ex As Exception
            'There was a problem decrypting the username
        End Try
    End If

    Trace.WriteLine(username)

答案 1 :(得分:0)

如果在解决方案资源管理器中右键单击项目,然后选择“属性”,则会在“属性”页面上显示“设置”选项卡,您可以在其中定义应用程序的设置。

这些设置将存储在XML文件中,靠近应用程序的可执行文件。 (或者在用户设置的情况下,在C:\ Users \ 用户名 ...目录中。

如果您将连接字符串设置命名为DbConnectionString,则可以从以下代码访问它:

 My.Settings.DbConnectionString

但是,如果您需要存储用户名和密码,我建议您将设置存储在Windows注册表中,并使用System.Security.Cryptography.ProtectedData类对其进行加密。 (不建议存储未加密的密码。)