所以我正在创建一个asp.net项目,在设置注册页面之后,是时候在数据库中添加用户输入的项目了,所以我创建了一个名为“myData”的新数据库 在验证所有输入后,我编写了以下代码:
If Page.IsPostBack = False Then
Dim sqlCon As New SqlConnection(ConfigurationManager.ConnectionStrings("myData").ConnectionString)
sqlCon.Open()
Dim str As String
str = "insert into users(username,password,email) VALUES('" + first + "','" + password + "','" + email + "')"
Dim sqlcmd As New SqlCommand(str, sqlcon)
sqlcmd.ExecuteNonQuery()
Session.Item("name") = txtUsername.Text
Response.Redirect("default.aspx")
sqlcon.Close()
MsgBox("Account Created with Success")
End if
每次运行页面时,我都会收到错误(对象引用没有设置为对象的实例。)for sqlcon 有什么我可以做的,以避免这个错误? 任何帮助都会很感激。
答案 0 :(得分:0)
Response.Redirect
之后没有布尔参数的任何代码都表示响应应该结束并且它会通过抛出System.Threading而停止执行。
因此您需要在Response.Redirect
之前关闭连接。
所以你的sqlcon对象引用没有设置为对象的实例
答案 1 :(得分:0)
我会利用using语句来封装您的数据库使用情况。这将正确处理您的对象。如前所述,重定向应该在不使用可选的boolean参数时最后发生。我还对您的查询进行了参数化,以帮助防止SQL注入攻击。
If Page.IsPostBack = False Then
Using sqlCon As New SqlConnection(ConfigurationManager.ConnectionStrings("myData").ConnectionString)
sqlCon.Open()
Dim query As String
query = "insert into users(username,password,email) VALUES(@username,@password,@email)"
Dim sqlcmd As New SqlCommand(str, sqlcon)
sqlCmd.Parameters.AddWithValue("@username", first)
sqlCmd.Parameters.AddWithValue("@password", password)
sqlCmd.Parameters.AddWithValue("@email", email)
sqlcmd.ExecuteNonQuery()
Session.Item("name") = txtUsername.Text
End Using
MsgBox("Account Created with Success")
Response.Redirect("default.aspx")
End if
另外,请确保您是否存储密码,以保存已加密和加密的密码:https://crackstation.net/hashing-security.htm。
只是为了掩护自己....我主要是一个C#家伙,我的VB有点生疏,所以可能会有一些语法错误。