sql字符串或二进制数据被截断

时间:2013-06-12 13:10:06

标签: c# sql-server insert

我使用ASP.NET和SQL 2008 R2。这个mlessage意味着我的数据超出了我的表格限制。但是如何找到/向用户显示导致此问题的列的消息?

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

2 个答案:

答案 0 :(得分:0)

在我看来,这有两种方式可以帮助你

方法1

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

我建议您添加一个断点以更深入地查看传入的值,然后您可以非常轻松地将该值与表中的字段进行比较,以验证冲突的位置,然后相应地修改您的定义。 / p>

方法2

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

希望它会有所帮助。

答案 1 :(得分:0)

您知道c#代码中列的限制是什么吗?

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

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