将数据从一行插入另一行时的数据截断消息

时间:2012-09-05 19:28:59

标签: c# datarow

如果数据从一个插入数据时太长,是否有办法允许数据被截断 排到另一排?现在发生的是,如果其中一个字段太长,则会出现错误并且不会添加该行。

以下是我的代码:

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并截断其余部分并仍然添加行。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您知道哪个列具有限制,以及该列映射到哪个字段,则只需在调用Update()之前截断所有对象上的字段值:

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

答案 1 :(得分: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,但我认为这就是你想要的。