2017-12-23 27 views
-1

데이터가 Excel 시트에서 할당되는 dtatgridview와 dtatgridview의 행을 SQL Server 테이블에 삽입하는 단추가있을 때 삽입 단추를 클릭하면 오류가 발생하고 값 770,214,566 상기 제 질문 제목에 선언 예외는 사용자의 휴대 전화 번호이고, 데이터 타입은 문자 인 (9)이 삽입 버튼 내 코드 내 테이블의 대부분에서varchar 형식의 산술 오버플로 오류 값 = 770214566.000000000

private void addCarsSaveBtn_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     for (int i = 0; i < addCarsDgv.Rows.Count - 1; i++) 
     { 
      SqlCommand cmd = new SqlCommand("insert into cars(Id,name,carType,stickerNo,plotNo,carPath,mobile,whats) values (@id,@name,@type,@sticker,@plot,@path,@mobile,@whats)", cn); 
      cmd.Parameters.AddWithValue("@id", id + i); 
      cmd.Parameters.AddWithValue("@sticker", Convert.ToInt32(addCarsDgv.Rows[i].Cells[0].Value)); 
      cmd.Parameters.AddWithValue("@name", addCarsDgv.Rows[i].Cells[1].Value); 
      cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value); 
      cmd.Parameters.AddWithValue("@whats", addCarsDgv.Rows[i].Cells[3].Value); 
      cmd.Parameters.AddWithValue("@type", addCarsDgv.Rows[i].Cells[4].Value); 
      cmd.Parameters.AddWithValue("@plot", addCarsDgv.Rows[i].Cells[5].Value); 
      cmd.Parameters.AddWithValue("@path", addCarsDgv.Rows[i].Cells[6].Value); 

      cmd.ExecuteNonQuery(); 
     } 
     MessageBox.Show("All Done!"); 
    } 
    catch (SqlException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+1

아주 간단 - ** ADDWITHVALUE **를 사용하지 마십시오. [나쁜 이유로] (https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue- 이미/) – SMor

답변

0

케이스, AddWithValue 귀하의 의도를 올바르게 해석합니다. 그러나 이와 같은 경우 다음 중 하나를 통해 항상 도움의 손길을 낼 수 있습니다.

  • 상황에 맞게 강제로 데이터 유형을 변환합니다. 귀하의 예에서는 간단한 .ToString()이 트릭을 수행 할 수 있습니다. 그런 다음 다시 소수점 이하 자릿수가 오면 다른 오류가 오는 것을 볼 수 있습니다. 당신이 알 수 있듯이 이것은 방탄하지 않습니다. 이것이 실패 할 수있는 또 다른 예는 타임 스탬프와 날짜가 둘 다 C# DateTime 데이터 형식으로 캐스팅되는 방법입니다.
  • 매개 변수의 데이터 형식에 대해 명시 적입니다.

    cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value); 
    cmd.Parameters[3].SqlDbType = SqlDbType.Char; 
    

    : 당신이 불합리한 일을하지 않으면 어쨌든 오류가 발생합니다 (같은 숫자 필드에 문자를 넣어)이 여기

옵션 # 2를 구현하는 방법의 예입니다 방탄해야한다 이것은 말할 필요도 없지만 "[3]"은 네 번째 매개 변수이기 때문입니다.

다른 사람들이 제안했듯이 AddWithValue을 사용하지 마십시오.