如果数据从一个插入数据时太长,是否有办法允许数据被截断 排到另一排?现在发生的是,如果其中一个字段太长,则会出现错误并且不会添加该行。
以下是我的代码:
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 :(得分: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
,但我认为这就是你想要的。