2013-06-12 2 views
1

저는 ASP.NET과 SQL 2008 R2를 사용합니다. 이 mlessage는 나의 테이블에 한계 이상으로 데이터를 가지고 있다는 것을 의미했다. 하지만 어떻게이 문제를 일으키는 사용자에게 어떤 메시지를 찾거나 보여줄 수 있습니까? 내 캐치 예외SQL 문자열 또는 이진 데이터 잘림

public static void Put_CSVtoSQL_PerLine(string LeFile) 
     { 

      string line = null; 
      bool IsFirst = true; 
      string SqlSyntax = Outils.LoadFileToString(Path.Combine(appDir, @"SQL\InsertLV_Temp_Gros.sql")); 

      int NOID, ENLEV_UNITE, NBR_COLIS, FACTURATION, TRANSPORTEUR, CHAUFFEUR; 
      DateTime DATE_CLOTURE; 
      decimal POID,ENLEV_CREMB, ENLEV_DECL; 
      bool LIVRS_SIGN, LIVRS_SAMD, IS_PRINT, IS_IMPORT; 

      object CODE_DEST, CODE_CLIENT, MODAL_MODE, LIBELLE_PORT, LIBELLE_EXPR, LIBELLE_UNITE, RS_NOM_EXP; 
      object ADDR_EXP, CP_EXP, VILLE_EXP, TEL_EXP, FAX_EXP, RS_NOM_DEST, ADDR_DEST, CP_DEST, INSEE_DEST, LE_ZONE, VILLE_DEST, TEL_DEST, FAX_DEST; 
      object NO_ORDRE_CUMMUL, CODE_MAG, OBS, LIB_AGENCE, LIB_TOURNE; 
      try 
      { 
       using (StreamReader sr = File.OpenText(LeFile)) 
       { 
        while ((line = sr.ReadLine()) != null) 
        { 
         string[] data = line.Split(';'); 

         if (data.Length > 0) 
         { 
          if (!IsFirst) 
          { 
           string[] data_Innen = data[0].Split(','); 
           if (data_Innen.Length == 38) 
           { 
            NOID = Convert.ToInt32(data_Innen[0].Replace('\'', ' ').Trim()); 
            CODE_DEST = data_Innen[1].Replace('\'', ' ').Trim(); 
            CODE_CLIENT = data_Innen[2].Replace('\'', ' ').Trim(); 
            DATE_CLOTURE = Convert.ToDateTime(data_Innen[3].Replace('\'', ' ').Trim()); 
            MODAL_MODE = data_Innen[4].Replace('\'', ' ').Trim(); 
            LIBELLE_PORT = data_Innen[5].Replace('\'', ' ').Trim(); 
            LIBELLE_EXPR = data_Innen[6].Replace('\'', ' ').Trim(); 
            ENLEV_UNITE = Convert.ToInt32(data_Innen[7].Replace('\'', ' ').Trim()); 
            LIBELLE_UNITE = data_Innen[8].Replace('\'', ' ').Trim(); 
            NBR_COLIS = Convert.ToInt32(data_Innen[9].Replace('\'', ' ').Trim()); 
            POID = Convert.ToDecimal(data_Innen[10].Replace('\'', ' ').Replace('.', ',').Trim()); 
            ENLEV_CREMB = Convert.ToDecimal(data_Innen[11].Replace('\'', ' ').Replace('.', ',').Trim()); 
            ENLEV_DECL = Convert.ToDecimal(data_Innen[12].Replace('\'', ' ').Replace('.', ',').Trim()); 
            RS_NOM_EXP = data_Innen[13].Replace('\'', ' ').Trim(); 
            ADDR_EXP = data_Innen[14].Replace('\'', ' ').Trim(); 
            CP_EXP = data_Innen[15].Replace('\'', ' ').Trim(); 
            VILLE_EXP = data_Innen[16].Replace('\'', ' ').Trim(); 
            TEL_EXP = data_Innen[17].Replace('\'', ' ').Trim(); 
            FAX_EXP = data_Innen[18].Replace('\'', ' ').Trim(); 
            RS_NOM_DEST = data_Innen[19].Replace('\'', ' ').Trim(); 
            ADDR_DEST = data_Innen[20].Replace('\'', ' ').Trim(); 
            CP_DEST = data_Innen[21].Replace('\'', ' ').Trim(); 
            INSEE_DEST = data_Innen[22].Replace('\'', ' ').Trim(); 
            VILLE_DEST = data_Innen[23].Replace('\'', ' ').Trim(); 
            TEL_DEST = data_Innen[24].Replace('\'', ' ').Trim(); 
            FAX_DEST = data_Innen[25].Replace('\'', ' ').Trim(); 
            IS_PRINT = Convert.ToBoolean(data_Innen[26].Replace('\'', ' ').Trim()); 
            IS_IMPORT = Convert.ToBoolean(data_Innen[27].Replace('\'', ' ').Trim()); 
            CHAUFFEUR = Convert.ToInt32(data_Innen[28].Replace('\'', ' ').Trim()); 
            NO_ORDRE_CUMMUL = data_Innen[29].Replace('\'', ' ').Trim(); 
            TRANSPORTEUR = Convert.ToInt32(data_Innen[30].Replace('\'', ' ').Trim()); 
            CODE_MAG = data_Innen[31].Replace('\'', ' ').Trim(); 
            FACTURATION = Convert.ToInt32(data_Innen[32].Replace('\'', ' ').Trim()); 
            LIVRS_SIGN = Convert.ToBoolean(data_Innen[33].Replace('\'', ' ').Trim()); 
            LIVRS_SAMD = Convert.ToBoolean(data_Innen[34].Replace('\'', ' ').Trim()); 
            OBS = data_Innen[35].Replace('\'', ' ').Trim(); 
            LIB_AGENCE = data_Innen[36].Replace('\'', ' ').Trim(); 
            LIB_TOURNE = data_Innen[37].Replace('\'', ' ').Trim(); 

            using (var connectionWrapper = new Connexion()) 
            { 
             var connectedConnection = connectionWrapper.GetConnected(); 
             SqlCommand comm_Insert = new SqlCommand(SqlSyntax, connectionWrapper.conn); 

             comm_Insert.Parameters.AddWithValue("@NOID", NOID); 
             comm_Insert.Parameters.AddWithValue("@CODE_DEST", CODE_DEST); 
             comm_Insert.Parameters.AddWithValue("@CODE_CLIENT", CODE_CLIENT); 
             comm_Insert.Parameters.AddWithValue("@DATE_CLOTURE", DATE_CLOTURE); 
             comm_Insert.Parameters.AddWithValue("@MODAL_MODE", MODAL_MODE); 
             comm_Insert.Parameters.AddWithValue("@LIBELLE_PORT", LIBELLE_PORT); 
             comm_Insert.Parameters.AddWithValue("@LIBELLE_EXPR", LIBELLE_EXPR); 
             comm_Insert.Parameters.AddWithValue("@ENLEV_UNITE", ENLEV_UNITE); 
             comm_Insert.Parameters.AddWithValue("@LIBELLE_UNITE", LIBELLE_UNITE); 
             comm_Insert.Parameters.AddWithValue("@NBR_COLIS", NBR_COLIS); 
             comm_Insert.Parameters.AddWithValue("@POID", POID); 
             comm_Insert.Parameters.AddWithValue("@ENLEV_CREMB", ENLEV_CREMB); 
             comm_Insert.Parameters.AddWithValue("@ENLEV_DECL", ENLEV_DECL); 
             comm_Insert.Parameters.AddWithValue("@RS_NOM_EXP", RS_NOM_EXP); 
             comm_Insert.Parameters.AddWithValue("@ADDR_EXP", ADDR_EXP); 
             comm_Insert.Parameters.AddWithValue("@CP_EXP", CP_EXP); 
             comm_Insert.Parameters.AddWithValue("@VILLE_EXP", VILLE_EXP); 
             comm_Insert.Parameters.AddWithValue("@TEL_EXP", TEL_EXP); 
             comm_Insert.Parameters.AddWithValue("@FAX_EXP", FAX_EXP); 
             comm_Insert.Parameters.AddWithValue("@RS_NOM_DEST", RS_NOM_DEST); 
             comm_Insert.Parameters.AddWithValue("@ADDR_DEST", ADDR_DEST); 
             comm_Insert.Parameters.AddWithValue("@CP_DEST", CP_DEST); 
             comm_Insert.Parameters.AddWithValue("@INSEE_DEST", INSEE_DEST); 
             comm_Insert.Parameters.AddWithValue("@VILLE_DEST", VILLE_DEST); 
             comm_Insert.Parameters.AddWithValue("@TEL_DEST", TEL_DEST); 
             comm_Insert.Parameters.AddWithValue("@FAX_DEST", FAX_DEST); 
             comm_Insert.Parameters.AddWithValue("@IS_PRINT", IS_PRINT); 
             comm_Insert.Parameters.AddWithValue("@IS_IMPORT", IS_IMPORT); 
             comm_Insert.Parameters.AddWithValue("@CHAUFFEUR", CHAUFFEUR); 
             comm_Insert.Parameters.AddWithValue("@NO_ORDRE_CUMMUL", NO_ORDRE_CUMMUL); 
             comm_Insert.Parameters.AddWithValue("@TRANSPORTEUR", TRANSPORTEUR); 
             comm_Insert.Parameters.AddWithValue("@CODE_MAG", CODE_MAG); 
             comm_Insert.Parameters.AddWithValue("@FACTURATION", FACTURATION); 
             comm_Insert.Parameters.AddWithValue("@LIVRS_SIGN", LIVRS_SIGN); 
             comm_Insert.Parameters.AddWithValue("@LIVRS_SAMD", LIVRS_SAMD); 
             comm_Insert.Parameters.AddWithValue("@OBS", OBS); 
             comm_Insert.Parameters.AddWithValue("@LIB_AGENCE", LIB_AGENCE); 
             comm_Insert.Parameters.AddWithValue("@LIB_TOURNE", LIB_TOURNE); 

             comm_Insert.ExecuteNonQuery(); 

            } 
           }        
          } 

          IsFirst = false; 

         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 

       throw new Exception("Err CSV to SQL" + LeFile + "--" + ex.Message, ex); 
      } 
     } 

: 여기 제 생각에는

catch (Exception ex) 
       { 

        throw new Exception("Err CSV to SQL" + WHICH COLUMN ??? + "--" + ex.Message, ex); 
       } 
+1

불행하게도을 절약 할 수 있습니다 특히, 확인하는 방법 SQL Server는 매우 유용한 정보를 반환하지 않습니다. [새로운 가상 테이블 : 오류를 upvoting 고려하십시오. 그것은 삭제 및 삽입 된 테이블과 유사합니다.] (http://connect.microsoft.com/SQLServer/feedback/details/774754/new-virtual-table-errors-it-would-analogous-to-the-deleted-and -inserted-tables) and or [열 이름을 제공하기 위해 "문자열 또는 이진 데이터가 잘 리게됩니다"라는 메시지를 수정하십시오] (https://connect.microsoft.com/SQLServer/feedback/details/339410) –

답변

0

당신이 열 중 하나 말했듯이 당신에게

방법 1

도움이 될 것 두 가지 방법입니다 테이블의 경계가 경계보다 큰 개체가 전송되고 있습니다.

전달할 값을 자세히 살펴보기 위해 중단 점을 추가하고 테이블의 필드와 쉽게 비교하여 충돌이 발생한 위치를 확인한 다음 이에 따라 정의를 수정하는 것이 좋습니다. 2

방법은 여기 당신이 http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/how-to-find-what-column

더는 도움이 될 것입니다 희망을 읽을 수있는 곳에서 링크이며, SQL에서 그것을 디버깅 할 수 있습니다.

0

C# 코드의 열에 대한 제약 조건을 알고 있습니까?

그렇다면 저장하기 전에 데이터를 확인 하시겠습니까?

데이터베이스에서 답을 얻기에 의존하는 대부분의 비용과 시간이 많이 필드의 길이가 약간의 범위 withing에 경우 사용자 인터페이스를 통해 액세스 권한을 가지고 있던 당신은 DB 왕복

관련 문제