0


ある行から別の行に挿入するときにデータが長すぎる場合、データを切り捨てることができるようにする方法はありますか? 現在起こっていることは、フィールドの 1 つが長すぎる場合にエラーが発生し、行が追加されないことです。

私が持っているコードは次のとおりです。

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 に答える