Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 亚音速3.0.0.3在多次保存操作时超时。MSSQL2005_Sql Server 2005_Subsonic - Fatal编程技术网

Sql server 2005 亚音速3.0.0.3在多次保存操作时超时。MSSQL2005

Sql server 2005 亚音速3.0.0.3在多次保存操作时超时。MSSQL2005,sql-server-2005,subsonic,Sql Server 2005,Subsonic,我正在读取csv文件,并将信息插入sql 2005数据库中 大约250次object.save操作后,它将超时。这里是代码和确切的错误消息。这不是代码的第一个版本,但它总是给出相同的超时时间 这不是一个大数据库,只有两个表。有什么我没做的吗?它是否为每个保存操作打开和关闭连接。欢迎所有关于这个问题的意见 List<shipment> oLstShipments = new List<shipment>(); while (oReader.ReadNextRecord())

我正在读取csv文件,并将信息插入sql 2005数据库中

大约250次object.save操作后,它将超时。这里是代码和确切的错误消息。这不是代码的第一个版本,但它总是给出相同的超时时间

这不是一个大数据库,只有两个表。有什么我没做的吗?它是否为每个保存操作打开和关闭连接。欢迎所有关于这个问题的意见

List<shipment> oLstShipments = new List<shipment>();
while (oReader.ReadNextRecord())
{
  int iIdShipment;
  if (int.TryParse(oReader[0], out iIdShipment))
  {
    shipment oShipment = new shipment();
    oShipment.idShipment = iIdShipment;
    oShipment.dateDelivered = oReader[1];
    oShipment.inventoryGroup = oReader[2];
    oShipment.companyId = oReader[3];
    oShipment.shipTo = oReader[4];
    oShipment.carrier = oReader[5];
    oShipment.accountOwner = oReader[6];
    oShipment.accountNumber = oReader[7];
    oShipment.trackingNumber = oReader[8];
    oLstShipments.Add(oShipment);
  }
}
oReader.Dispose();
oSR.Dispose();

foreach (shipment oShip in oLstShipments)
{
  oShip.Save();
}
测试#1

如果我尝试分离db,它将显示101个活动连接(1个用于management studio,其余用于代码)

如果像以前一样尝试使用repo处理列表,则会出现以下异常:System.Data.SqlClient.SqlException:传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。此RPC请求中提供的参数太多。最大值为2100

我很确定我做错了什么,我不可能是唯一一个想在数据库中插入这么多项目的人

编辑12/13/2009 09:44:00:

下面是创建装运表的脚本

/****** Object:  Table [dbo].[shipment]    Script Date: 12/11/2009 14:33:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[shipment](
    [idShipment] [int] NOT NULL,
    [dateDelivered] [varchar](255) NULL,
    [inventoryGroup] [varchar](255) NULL,
    [companyId] [varchar](255) NULL,
    [shipTo] [varchar](255) NULL,
    [carrier] [varchar](255) NULL,
    [accountOwner] [varchar](255) NULL,
    [accountNumber] [varchar](255) NULL,
    [trackingNumber] [varchar](255) NULL,
    [cebnowaybill] [varchar](50) NULL,
 CONSTRAINT [PK_shipment] PRIMARY KEY CLUSTERED 
(
    [idShipment] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

超时是由于数据库没有可用的连接而导致的,我猜是因为某个读卡器处于打开状态

首先-为什么要读取下一条记录()?你是想用Read()吗?您还可以将读取器传递到Load()中,它将为您加载对象

最后,我建议将其包装在using语句中,以确保即使出现错误,读者和所有内容都已关闭

编辑:
在阅读下面的回答时-您是否为表定义了主键?

超时是由于数据库没有可用的连接而导致的,我猜是因为某个读卡器在某个地方处于打开状态

首先-为什么要读取下一条记录()?你是想用Read()吗?您还可以将读取器传递到Load()中,它将为您加载对象

最后,我建议将其包装在using语句中,以确保即使出现错误,读者和所有内容都已关闭

编辑:
在阅读下面的回答时-您是否为表定义了主键?

Sylvain与其告诉您如何解决问题,不如告诉您应该做什么。因此,与其担心如何保存每个单独的项目,而不必打开连接100次以上,您应该执行一次批处理操作,一次保存所有记录

下面是SimpleRepo的一个示例,但这也可以通过活动记录完成

var repo=new SimpleRepository();
repo.AddMany(oLstShipments);

Sylvain不是告诉你如何解决你的问题,而是告诉你应该做什么。因此,与其担心如何保存每个单独的项目,而不必打开连接100次以上,您应该执行一次批处理操作,一次保存所有记录

下面是SimpleRepo的一个示例,但这也可以通过活动记录完成

var repo=new SimpleRepository();
repo.AddMany(oLstShipments);

发布的版本3.0.0.3(7月)中有一个bug,但早期版本中没有。 它是一个rdr,没有使用using或后跟rdr.close进行包装。这会有我提到的效果。正在打开但未关闭的连接。。。这意味着连接池已满

正如在与Rob的多次电子邮件对话中所讨论的那样,它已被更正。您必须进入github上的source选项卡才能找到更正

多亏了你的帮助。特别感谢亚当(在这么多回复后没有放弃),也感谢罗布快速回复我的电子邮件


亚音速很好,花时间寻找问题的答案是值得的

发布的版本3.0.0.3(7月)中有一个bug,但早期版本中没有。 它是一个rdr,没有使用using或后跟rdr.close进行包装。这会有我提到的效果。正在打开但未关闭的连接。。。这意味着连接池已满

正如在与Rob的多次电子邮件对话中所讨论的那样,它已被更正。您必须进入github上的source选项卡才能找到更正

多亏了你的帮助。特别感谢亚当(在这么多回复后没有放弃),也感谢罗布快速回复我的电子邮件


亚音速很好,花时间寻找问题的答案是值得的

oReader与数据库无关,它是一个从文本文件读取记录的csv阅读器。对于每个记录,我使用亚音速添加一次装运。顺便说一句,你能回答问题真是太好了。您就是一个值得效仿的例子。我有一个sql server studio管理的连接打开。然后我启动了显示在那里的代码。。。亚音速将连接100次,然后就会失败。我有点惊讶,它将创建100个连接,似乎每个对象都有一个连接。我想它会使用一个连接并在所有对象上共享它。。。如果连接超时,它将自动重新连接。。我不知道亚音速的内部。我一定没有正确使用它。阅读其他帖子告诉我它会尽快打开和关闭连接。。。什么会使连接不关闭。。。或者没有足够快的接近。。。像这样的想法。但愿我能尽快得到答案reader与数据库无关,它是一个csv阅读器,可以从文本文件中读取记录。对于每个记录,我使用亚音速添加一次装运。顺便说一句,你能回答问题真是太好了。您就是一个值得效仿的例子。我有一个sql server studio管理的连接打开。然后我启动了显示在那里的代码。。。亚音速将连接100次,然后就会失败。我有点惊讶,它将创建100个连接,似乎每个对象都有一个连接。我想它会使用一个连接并在所有对象上共享它。。。如果连接超时,它将自动重新连接。。我不知道亚音速的内部。我一定不是在用它
/****** Object:  Table [dbo].[shipment]    Script Date: 12/11/2009 14:33:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[shipment](
    [idShipment] [int] NOT NULL,
    [dateDelivered] [varchar](255) NULL,
    [inventoryGroup] [varchar](255) NULL,
    [companyId] [varchar](255) NULL,
    [shipTo] [varchar](255) NULL,
    [carrier] [varchar](255) NULL,
    [accountOwner] [varchar](255) NULL,
    [accountNumber] [varchar](255) NULL,
    [trackingNumber] [varchar](255) NULL,
    [cebnowaybill] [varchar](50) NULL,
 CONSTRAINT [PK_shipment] PRIMARY KEY CLUSTERED 
(
    [idShipment] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
var repo=new SimpleRepository();
repo.AddMany(oLstShipments);