Bri*_*ian 3 database vb.net sql-server asp.net sql-server-2012
我正在尝试创建一个简单的注册表单,其中来自文本框等的数据被输入到一个名为的表中users:
user_id int
username nchar(20)
password nchar(20)
... more columns
Run Code Online (Sandbox Code Playgroud)
码:
Dim Username As String = txtUsername.ToString
... more variable declarations
lblDOB.Text = DOB.ToString
lblDOB.Visible = True
Dim ProjectManager As String = "test"
... more constant declarations
Dim conn As New SqlConnection("...conn string...")
sqlComm = "INSERT INTO users(Username, Password, ...other columns...)" +
"VALUES(@p1, @p2, ...other params...)"
conn.Open()
registerSQL = New SqlCommand(sqlComm, conn)
registerSQL.Parameters.AddWithValue("@p1", Username)
... other AddWithValues
registerSQL.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
字符串或二进制数据将被截断.该语句已终止.
是的,您允许人们输入任何旧字符串.您需要将每个参数限制为该列中允许的最大长度.例如,如果您不想要错误,可以将用户名截断为20个字符,或者当参数值超过20个字符时可以引发自己的错误.截断你可以简单地说:
Dim Username As String = txtUsername.ToString.Substring(0,20)
Run Code Online (Sandbox Code Playgroud)
或者更好的是,在构建表单时,MaxLength为表格中的列匹配表单字段.如果您的表只设计为20,那么为什么让用户输入超过20个字符?
另外,nchar对于大多数此类数据来说,这是一个糟糕的数据选择,除非用户名,密码等总是正好是20个字符.你应该强烈考虑nvarchar.
| 归档时间: |
|
| 查看次数: |
25468 次 |
| 最近记录: |