我正在使用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
,但这并不能阻止实际更新时出现上述错误。