在INSERT和UPDATE上使用ODBCDataAdapter自动截断字段

时间:2017-11-29 11:01:45

标签: c# odbc

我正在使用System.Data.Odbc.OdbcDataAdapter更新数据库。我也不知道在运行时我正在更新哪些表或字段。我所使用的代码大致相当于以下内容:

{
    mConn = new OdbcConnection(connectionStr);
    mConn.Open();

    mDataSet = new DataSet();
    mDataAdapter = new OdbcDataAdapter(selectStatement, mConn);
    mCmdBldr = new OdbcCommandBuilder(mDataAdapter);

    var trans = mConn.BeginTransaction();
    mDataAdapter.SelectCommand.Transaction = trans;

    mDataAdapter.Fill(mDataSet, tableName);

    mDataTable = mDataSet.Tables[tableName];
    mDataTable.Rows.Add(mNewDataTableRow);
    mDataAdapter.Update(mDataSet, tableName);

    trans.Commit();
}

以上内容是从我的实际代码中删除的,但希望能够了解我如何使用DataAdapter。正如我所说,它在大多数情况下都有效......

如果我尝试将多个字符插入到SQL Server VARCHAR列中,它当然会失败,在这种情况下我会收到以下错误(在这种情况下,我正在写SQL Server,但数据库可能是某些东西其他人):

  

发生System.Data.Odbc.OdbcException HResult = 0x80131937
  Message = ERROR [22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL   服务器]字符串或二进制数据将被截断。

我的问题是:

有什么方法可以让OdbcDataAdapter 自动截断文字字段?

我知道如果我使用的是SQL Server,我可以关闭数据库中的ANSI_WARNINGS,但我可能不会,但我不想这样做,因为在大多数情况下我会想要以上引发的异常。我也明白,我可以自己检查字段上的约束并在插入数据之前截断数据,但我正在寻找一些不那么手动的东西。如果必须,我会写那段代码,但我宁愿不必这样做。

我已经考虑过设置OdbcParameter.Size属性,但这只会在不同的地方引发异常。与DataColumn.MaxLength类似。

我还查看过设置DataSet.EnforceConstraints,但这并不能阻止实际更新时出现上述错误。

0 个答案:

没有答案