截断的SQL字符串或二进制数据

本文关键字:二进制 数据 字符串 SQL | 更新日期: 2023-09-27 18:18:15

我使用ASP。. NET和SQL 2008 R2。这条消息意味着我的数据超过了表中的限制。但是我怎样才能找到/显示消息给用户哪一列导致了这个问题呢?

 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);
            }
        }

in my catch exception:

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

截断的SQL字符串或二进制数据

我认为有两种方法可以帮助你

方法1

正如你所说的,表中的一列正在被发送一个大于其边界的对象。

我建议你应该添加一个断点来更深入地查看你传入的值,然后你可以很容易地将一个与表中的字段进行比较,以验证冲突在哪里,然后相应地修改你的定义。

方法2

你也可以在sql中调试它,这里是链接,你可以从那里阅读更多http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/how-to-find-what-column

你知道c#代码中列的约束是什么吗?

如果是,您是否在保存之前验证了您的数据?

依靠从数据库获取答案来检查字段的长度是否在某个范围内是最昂贵和耗时的方法,特别是当您通过用户界面访问它时,您可以节省db往返