2012-01-02 51 views
3

新しいデータを追加するときに私はいつもエラーが発生しました。エラーが表示されます文字列またはバイナリデータは切り捨てられます。ステートメントが終了しました

文字列またはバイナリデータが切り捨てられます。この声明は終了しました

私はバックエンドまたはコードを振り返りました。 1列目のTWO LABEL DATAを追加し、競合がありますように私は、(年)に参加したいと思いますので、それが見えます - (StudentNumber)

をここに私のINSERTのコードは、INTO文

INSERT INTO 
    [Student_Information] (StudentID, LastName, FirstName, MiddleName, Gender, 
          ContactNumber, Citizenship, Religion, Birthday, Address) 
    VALUES 
    ('" & lbl_cyear.Text - studid.Text & "','" + txt_lname.Text + "', '" + txt_fname.Text + "', '" + txt_mname.Text + "', '" + DDGender.Text + "', '" & txt_cnumber.Text & "', '" & txt_citizenship.Text & "' , '" + txt_religion.Text + "' , '" & txt_bday.Text & "', '" & txt_address.Text & "')" 

だと、ここでのコードは、どのようです私は年と学生番号を生成します

Sub SNYear() 
    Dim test As Date 

    test = Convert.ToDateTime(Today) 
    lbl_cyear.Text = test.Year 
End Sub 
Sub SNGenerate() 
    'displaying Studentid 
    Dim SN As Integer ' Student Number 
    Dim SID As String 'Student ID Num as String 

    Dim rdr As SqlDataReader 

    cmd1.Connection = cn 
    cmd1.Connection.Open() 
    cmd1.CommandText = "Select Max (StudentID) as expr1 from [Student_Information]" 
    rdr = cmd1.ExecuteReader 

    If rdr.HasRows = True Then 
     rdr.Read() 
    End If 

    If rdr.Item(0).ToString = Nothing Then 
     SN = rdr.Item(0) + 1 
     SID = Format(SN, "0000") 
    ElseIf rdr.Item(0).ToString = 0 Then 
     SN = rdr.Item(0) + 1 
     SID = Format(SN, "0000") 

    Else 
     SN = rdr.Item(0) + 1 
     SID = Format(SN, "0000") 
    End If 


    studid.Text = SID 

    cmd1.Connection.Close() 

End Sub 

誰かがコードを手伝ってくれますか?別のラベルテキストで2つのデータを結合し、テーブルの1つの列に保存する方法。

+0

この質問にあなたの名前が付けられています。この問題は、Visual BasicとSQLとの関係であり、ASP.NETではありません。 –

+0

'StudentID'を' lbl_cyear.Text - studid.Text'に設定しましたか? – jp2code

答えて

8

Woah!そのようなSQLクエリを書くことは決してありません。それは危険なSQLインジェクションの対象であり、そのようなコードは実際にはどこでもSQLインジェクション講義の最悪のシナリオとして使用されています!

エラーメッセージ文字列またはバイナリデータは切り捨てられます。ステートメントは終了されました。は実際に何が間違っているかを綴ります。特定のディメンションを持つフィールドに大量のデータを挿入しようとしています。

あなたはStudentIDフィールドに次の式を挿入しようとしている。

lbl_cyear.Text - studid.Text 

私はあなたがそこに何をしたいのかさえわかりません。 Visual Basicはデフォルトで緩く型付けされているので、おそらくlbl_cyear.Textを数値として扱い、studid.Text(数値として)からを減算しようとします。

lbl_cyear.Text & "-" & studid.Text 

あなたが情報の二つの異なるタイプのためStudentID列を使用しようとしているようです:あなたは、おそらくこのような何かを意味します。それをしないでください。学生IDの1つの形式を決め、その列の寸法を決めます。

これは宿題ですか?

+0

はい、それは宿題です。 Btw、私は操作のための分離のために " - "を使用しています。要件が何を言ったか。学生番号は "Year - Student Number"で構成し、次に何をすべきですか?手伝って頂けますか? –

+0

はい、あなたのコードが書かれている方法ですが** **操作です。あなたがこれで移動するのを助けるために、あなたが見なければならない小さな事がたくさんあり、それはstackoverflowの質問とは異なる設定をとります... –

2

Y @ atornbladには、コードの再構成に関するいくつかの非常に有効な点があります。しかし、あなたが尋ねている特定の問題は、カラムよりも長いカラムにデータを挿入しようとしているためです。

など。 - 最大長が5文字の列に "Lorem Ipsum"を挿入しようとしています。

編集 テーブルがどのように定義されているかをもう一度見て、保存しているデータに適していることを確認する必要があります。また、保存しようとしているデータが、テーブルが設計された正しいフォーマットであることを確認してください。あなたが望む形式であると想定せず、実際にデバッグモードでプログラムをステップ実行し、変数がデータベースに送られる前にそれが何であるかを見てください。

+0

正確には、私は50文字の最大長さとI入力されたのは約9文字です:\ –