4

テキストボックスなどからのデータが次のテーブルに入力される単純な登録フォームを作成しようとしていますusers

user_id     int
username    nchar(20)
password    nchar(20)
... more columns

コード:

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()

次のエラー メッセージが表示されます。

文字列型やバイナリは省略されます。ステートメントは終了されました。

4

3 に答える 3

7

はい、人々が入力している古い文字列を許可しています。各パラメーターをその列で許可されている最大長に制限する必要があります。たとえば、エラーが発生したくない場合は、ユーザー名を 20 文字に切り詰めるか、パラメータ値が 20 文字を超える場合に独自のエラーを発生させることができます。切り捨てるには、次のように言うだけです。

Dim Username As String = txtUsername.ToString.Substring(0,20)

MaxLengthまたは、フォームを作成するときに、テーブルの列に一致するフォーム フィールドに を指定することをお勧めします。テーブルが 20 文字しか保持できないように設計されているのに、なぜユーザーに 20 文字を超える入力を許可するのでしょうか?

余談ncharですが、ユーザー名やパスワードなどが常に正確に 20 文字である場合を除き、このデータのほとんどにとって、これはひどいデータ選択です。を強く検討する必要がありますnvarchar

于 2013-03-28T19:40:17.497 に答える
0

nchar(20) を varchar(50) に変更してください

于 2014-03-06T09:55:16.147 に答える