2012-09-05 47 views
0

如果数据在从一行
行插入到另一行时过长,是否允许数据被截断?现在发生的事情是,如果其中一个字段太长,它会得到一个错误并且不会添加该行。将数据从一行插入另一行时的数据截断消息

这里是一段代码,我有:

DataRow dr = dt.NewRow(); 
for (int j = 0; j < edi50.Columns.Count; j++) 
    dr[j] = dr50[j]; 

dt.Rows.Add(dr); 

try 
{ 
    RemoveNulls(dt); 
    daEDI40050.Update(dt); 
} 
catch (Exception e) 
{ 
    string m = e.Message; 
}  

我有一个描述字段25个字符长,但该数据是34个字符进入它。我希望能够插入25并截断剩下的部分,然后添加该行。

谢谢

回答

0

你可以得到数据库的模式第一(未经测试):

类似这样
DataTable schema; 
using (var con = new System.Data.SqlClient.SqlConnection(conStr)) 
{ 
    var getSchemaSql = String.Format("SELECT * FROM {0}", tableName); 
    using (var schemaCommand = new System.Data.SqlClient.SqlCommand(getSchemaSql, con)) 
    { 
     con.Open(); 
     using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly)) 
     { 
      schema = reader.GetSchemaTable(); 
     } 
    } 
} 

,然后东西:

for (int j = 0; j < schema.Rows.Count; j++) 
{ 
    DataRow schemaRow = schema.Rows[j]; 
    Type dataType = schemaRow.Field<Type>("DataType"); 
    int columnSize = schemaRow.Field<int>("ColumnSize"); 
    if (dataType.FullName == "System.String") 
    { 
     String value = dr50[j] as String; 
     if (value != null) 
      value = value.Substring(0, columnSize); 
    } 
} 

再次,完全没有经过测试,从头开始编写,但它可能会给你一个想法如何获得列大小。当然这只适用于string,但我认为这是你想要的。

+0

谢谢@TimSchmelter – hmakled

0

如果您知道哪一列有限制,并且该列的地图,其中外地调用Update()之前,则只需截断的所有对象的字段的值:

myObject.StringField = myObject.StringField.Substring(0,25); 
+0

谢谢@KeithS – hmakled

相关问题