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

谢谢你

4

2 回答 2

0

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

myObject.StringField = myObject.StringField.Substring(0,25);
于 2012-09-05T19:34:28.820 回答
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,但我认为这就是您想要的。

于 2012-09-05T19:47:30.050 回答