字段长度大于最大值
Field length is > maximum
我正在使用 C# 开发一些中间件,使用 System.Data.Odbc 库与 v10 PSQL 数据库进行交互。我有一组工作 select 并按顺序插入查询 I 运行 偶尔完整的序列会毫无问题地执行,但大多数时候对于序列中的每个 INSERT 查询我的错误处理都会捕获异常:
错误 [HY000][普遍][ODBC 客户端接口][LNA][普遍][ODBC 引擎接口][日期记录管理器]字段长度大于最大值
我正在尝试了解这意味着什么以及如何解决它。
这是在 Windows 2008 R2 服务器上。我在 Visual Studios Community 2015 中使用 C# 从 Web 系统获取信息(此处没有问题)并将销售订单添加到服务器上使用 Pervasive SQL v10 数据库的其他系统。
PSQL 表很大,有 80-160 列,所以对于这 3 个表,我需要先向 I 运行 写入一个 select 查询以获取多余的值,然后将它们绑定为插入查询的参数。有 4 个 SELECT/INSERT 例程 运行 顺序,最后一个 运行 在 foreach 循环中 n 次。
我过去曾使用 MS Access 和 PHP 在这个系统上 运行 这个 ODBC SELECT/INSERT 序列。我已经尝试清理解决方案、重新启动服务器并重建,以及对命令添加额外的 Dispose() 调用,但我仍然遇到这些错误。
class PSQLOrderConnector
{
private OdbcConnection Odbc { get; }
public PSQLOrderConnector()
{
Odbc = new OdbcConnection(Constants.ODBCSTRING);
Odbc.Open();
}
/*
...
*/
public void CreateOrderAddressBillTo(string CustomerCode, string OrderNumber, string AddDate, int AddTime)
{
OdbcCommand cmdSelectAddressB = new OdbcCommand();
OdbcCommand cmdInsertAddressB = new OdbcCommand();
cmdSelectAddressB = this.Odbc.CreateCommand();
cmdSelectAddressB.CommandText = OrderQueries.PQSL_SELECT_ADDRESS_BY_CUSTOMER;
cmdSelectAddressB.Parameters.Add("@CEV_NO", OdbcType.Text).Value = CustomerCode;
OdbcDataReader reader = cmdSelectAddressB.ExecuteReader();
reader.Read();
var NAME = reader.GetString(0);
/* ...repeat for the next 80 columns */
cmdSelectAddressB.Dispose();
cmdInsertAddressB = this.Odbc.CreateCommand();
cmdInsertAddressB.CommandText = OrderQueries.PSQL_INSERT_ORDER_ADDRESS;
cmdInsertAddressB.Parameters.Add("NAME", OdbcType.Text).Value = NAME;
/* ...repeat for the next 80 variables */
try
{
int result = cmdInsertAddressB.ExecuteNonQuery();
}
catch (OdbcException odbce)
{
//Exception error gets thrown here
}
cmdInsertAddressB.Dispose();
}
/*
...
*/
}
class Order
{
private PSQLOrderConnector PSQLOrder { get; }
public Order()
{
PSQLOrder = new PSQLOrderConnector();
}
/*
...
*/
public void AddOrders(List<businessEvent> Events )
{
/*
...
*/
/* These 4 calls either pass in sequence or fail in sequence on the Try/Catch in the above class*/
PSQLOrder.CreateOrderHeader(OrderNumber, CustomerCode, PONumber, SubTotal, CurrentCost, AverageCost, AddDate, AddTime);
/* This is the method detailed above */
PSQLOrder.CreateOrderAddressBillTo(CustomerCode, OrderNumber, AddDate, AddTime);
PSQLOrder.CreateOrderAddressShipTo(CustomerCode, ShipToCode, OrderNumber, AddDate, AddTime);
int recNo = 1;
foreach (ItemLine line in itemLines)
{
PSQLOrder.CreateOrderDetail( OrderNumber, recNo, line.ItemCode, line.Quantity, line.Price, AddDate, AddTime);
recNo++;
}
}
}
(我在这里编辑了更清晰的发布代码,希望没有错字)
在最后几行 运行ning 中,函数调用序列中每个插入的错误触发器,或者整个序列成功完成。使用相同或不同的输入,这种情况会以大约 80/20 failure/success 的比率随机发生。
我已经解决了我的问题,错误消息完全正确并且指向我的时间戳。因为我用变量 AddTime 设置了一次,然后将其发送到 4 个函数调用中的每一个,这就是为什么它会按顺序失败但有时会工作,可能是在系统分钟的前 9 秒内。
我正在使用 C# 开发一些中间件,使用 System.Data.Odbc 库与 v10 PSQL 数据库进行交互。我有一组工作 select 并按顺序插入查询 I 运行 偶尔完整的序列会毫无问题地执行,但大多数时候对于序列中的每个 INSERT 查询我的错误处理都会捕获异常:
错误 [HY000][普遍][ODBC 客户端接口][LNA][普遍][ODBC 引擎接口][日期记录管理器]字段长度大于最大值
我正在尝试了解这意味着什么以及如何解决它。
这是在 Windows 2008 R2 服务器上。我在 Visual Studios Community 2015 中使用 C# 从 Web 系统获取信息(此处没有问题)并将销售订单添加到服务器上使用 Pervasive SQL v10 数据库的其他系统。
PSQL 表很大,有 80-160 列,所以对于这 3 个表,我需要先向 I 运行 写入一个 select 查询以获取多余的值,然后将它们绑定为插入查询的参数。有 4 个 SELECT/INSERT 例程 运行 顺序,最后一个 运行 在 foreach 循环中 n 次。
我过去曾使用 MS Access 和 PHP 在这个系统上 运行 这个 ODBC SELECT/INSERT 序列。我已经尝试清理解决方案、重新启动服务器并重建,以及对命令添加额外的 Dispose() 调用,但我仍然遇到这些错误。
class PSQLOrderConnector
{
private OdbcConnection Odbc { get; }
public PSQLOrderConnector()
{
Odbc = new OdbcConnection(Constants.ODBCSTRING);
Odbc.Open();
}
/*
...
*/
public void CreateOrderAddressBillTo(string CustomerCode, string OrderNumber, string AddDate, int AddTime)
{
OdbcCommand cmdSelectAddressB = new OdbcCommand();
OdbcCommand cmdInsertAddressB = new OdbcCommand();
cmdSelectAddressB = this.Odbc.CreateCommand();
cmdSelectAddressB.CommandText = OrderQueries.PQSL_SELECT_ADDRESS_BY_CUSTOMER;
cmdSelectAddressB.Parameters.Add("@CEV_NO", OdbcType.Text).Value = CustomerCode;
OdbcDataReader reader = cmdSelectAddressB.ExecuteReader();
reader.Read();
var NAME = reader.GetString(0);
/* ...repeat for the next 80 columns */
cmdSelectAddressB.Dispose();
cmdInsertAddressB = this.Odbc.CreateCommand();
cmdInsertAddressB.CommandText = OrderQueries.PSQL_INSERT_ORDER_ADDRESS;
cmdInsertAddressB.Parameters.Add("NAME", OdbcType.Text).Value = NAME;
/* ...repeat for the next 80 variables */
try
{
int result = cmdInsertAddressB.ExecuteNonQuery();
}
catch (OdbcException odbce)
{
//Exception error gets thrown here
}
cmdInsertAddressB.Dispose();
}
/*
...
*/
}
class Order
{
private PSQLOrderConnector PSQLOrder { get; }
public Order()
{
PSQLOrder = new PSQLOrderConnector();
}
/*
...
*/
public void AddOrders(List<businessEvent> Events )
{
/*
...
*/
/* These 4 calls either pass in sequence or fail in sequence on the Try/Catch in the above class*/
PSQLOrder.CreateOrderHeader(OrderNumber, CustomerCode, PONumber, SubTotal, CurrentCost, AverageCost, AddDate, AddTime);
/* This is the method detailed above */
PSQLOrder.CreateOrderAddressBillTo(CustomerCode, OrderNumber, AddDate, AddTime);
PSQLOrder.CreateOrderAddressShipTo(CustomerCode, ShipToCode, OrderNumber, AddDate, AddTime);
int recNo = 1;
foreach (ItemLine line in itemLines)
{
PSQLOrder.CreateOrderDetail( OrderNumber, recNo, line.ItemCode, line.Quantity, line.Price, AddDate, AddTime);
recNo++;
}
}
}
(我在这里编辑了更清晰的发布代码,希望没有错字)
在最后几行 运行ning 中,函数调用序列中每个插入的错误触发器,或者整个序列成功完成。使用相同或不同的输入,这种情况会以大约 80/20 failure/success 的比率随机发生。
我已经解决了我的问题,错误消息完全正确并且指向我的时间戳。因为我用变量 AddTime 设置了一次,然后将其发送到 4 个函数调用中的每一个,这就是为什么它会按顺序失败但有时会工作,可能是在系统分钟的前 9 秒内。