2017-03-24 22 views
0

更新機能を追加する前に、テーブルに挿入しようとするとランタイム例外です。文字列またはバイナリデータが切り捨てられ、SQL Serverテーブルに挿入されます。

private void button1_Click(object sender, EventArgs e) 
    { 
     Random rndID = new Random(); 
     int id = rndID.Next(100, 1000); 

     SqlConnection connection = new SqlConnection(@"Data Source=DESKTOP-IOHHC7K\SQLEXPRESS;Initial Catalog=CityAppDB;Integrated Security=True"); 

     SqlCommand command = new SqlCommand("insert into UsersTB(User_ID, Full_Name, Email_Address, Phone_Number, Password) 
      values('" + id.ToString() + "','" + textBox2.Text + "','" + 
      textBox3.Text + "','" + textBox4.Text + "','" + 
      textBox5.Text + "')", connection); 
     command.Connection.Open(); 

     if ((ISExisted(id)) && (CheckUserFullName(textBox2.Text)) && (IsValidEmail(textBox3.Text)) && (IsValidPhoneNumber(textBox4.Text)) && (IsValidPassword(textBox5.Text))) 
     { 
      command.ExecuteNonQuery();//String or binary data would be truncated 
      MessageBox.Show("Added."); 
      ShowAllUsers(); 
     } 
     else 
     { 
      MessageBox.Show("Something wrong"); 
     } 

     command.Connection.Close(); 
    } 
+0

データベース –

+2

でUSER_IDとのPhoneNumberのデータ型が何であるのようになりますSqlParameterクラス使用を知っていることができます[編集]あなたが何かを更新したいあなたの疑問?そして、Sql Injectionについて調べてください。あなたのコードは、起こるのを待っている災害です – Steve

+0

私はそうは思わない –

答えて

2

このエラーは、データベース列の定義については長すぎる値を更新しようとしていることを意味します。データベースで

は、のは、彼らがvarchar[10]としてdefindedされているとしましょう、あなたのFull_NameEmail_AddressPhone_NumberPasswordフィールドの長さをチェックし、このエラーは、

10文字より長い文字列とその値を更新しようとしていることを意味し

テキストボックスのいずれかに保存されている値の長さを確認してください:textBox2.TexttextBox3.TexttextBox4.TextまたはtextBox5.Textそれらのうちの1つは、データベーススキーマが受け入れるよりも長いテキストを持っています。

解決策1: データベースの列サイズを大きくします。

解決方法2: ユーザーの入力長を制限するには、Textbox.MaxLengthを使用します。

+0

1秒私の値を確認したい、ありがとう助けて幸いです。 –

+0

あなたが何か他のものが必要な場合は教えてください。 –

+0

はい、ありがとう兄、phone_numberはnchar(10) –

2

エラーの単独の目的は、列のサイズが指定した値より小さく指定されていて、テーブル構造からしかわからないことです。

また、文字列連結を使用して値を渡すのを停止する代わりに、SQLインジェクションを避けるためにパラメータ化されたクエリを使用します。あなたは

あなたのパラメータ化INSERT文が

string query = "insert into UsersTB(User_ID,Full_Name,Email_Address,Phone_Number,Password) values(@User_ID,@Full_Name,@Email_Address,@Phone_Number,@Password)"; 
    SqlCommand command = new SqlCommand(query, connection); 

    command.Parameters.Add("@User_ID",id.ToString()); 
    command.Parameters.Add("@Full_Name",textBox2.Text); 
    command.Parameters.Add("@Email_Address",textBox3.Text); 
    command.Parameters.Add("@Phone_Number",textBox4.Text); 
    command.Parameters.Add("@Password",textBox5.Text); 
関連する問題