截断的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);
}
我认为有两种方法可以帮助你
方法1正如你所说的,表中的一列正在被发送一个大于其边界的对象。
我建议你应该添加一个断点来更深入地查看你传入的值,然后你可以很容易地将一个与表中的字段进行比较,以验证冲突在哪里,然后相应地修改你的定义。
方法2你也可以在sql中调试它,这里是链接,你可以从那里阅读更多http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/how-to-find-what-column
你知道c#代码中列的约束是什么吗?
如果是,您是否在保存之前验证了您的数据?
依靠从数据库获取答案来检查字段的长度是否在某个范围内是最昂贵和耗时的方法,特别是当您通过用户界面访问它时,您可以节省db往返