Sybase (SAP) ASE ADO.NET blob 插入连接超时
Sybase (SAP) ASE ADO.NET connection times out for blob inserts
我有一个只有一个 table 的新 SAP ASE 数据库,而这个 table 只有三列 - 两个 varchar 列和一个图像列。
使用取自 SAP ASE 数据库开发版的纯 ADO.NET 提供程序,我只是想用文件的内容向这个 table 中插入一条记录 - 我的第一次尝试是使用 3kb 文件,它就像一个魅力。然后,我拿了一个大约 900kb(肯定小于 1MB)的 PDF,应用程序给了我一个超时;更丑陋的是,不知何故,整个数据库都被阻塞了——我不得不重新启动服务以使其再次工作。
那么,现在让我们开始编写代码 - 如果有人可以引导我走向正确的方向,我将不胜感激。
static void Main(string[] args)
{
using (AseConnection aseConnection =
new AseConnection(
"data source=...;initial catalog=...;User ID=...;Password=...;Port=...;ConnectionIdleTimeout=600;CommandTimeOut=0;ConnectionTimeOut=0;Pooling=False;TextSize=10000000")
)
{
aseConnection.Open();
Console.WriteLine(aseConnection.State.ToString());
AseCommand setTextSizeCommand = new AseCommand("SET TEXTSIZE 10000000", aseConnection);
setTextSizeCommand.ExecuteNonQuery();
byte[] fileContent = File.ReadAllBytes(@"d:\adonet.pdf");
//byte[] fileContent = File.ReadAllBytes(@"d:\rack.txt");
AseCommand aseCommand = new AseCommand("insert into xxx(web_id, doc_name, doc_file) values(?, ?, ?)", aseConnection);
aseCommand.Parameters.Add(0, AseDbType.VarChar, 20).Value = "100";
aseCommand.Parameters.Add(1, AseDbType.VarChar, 100).Value = "fisier";
aseCommand.Parameters.Add(2, AseDbType.Image, fileContent.Length).Value = fileContent;
aseCommand.NamedParameters = false;
aseCommand.CommandTimeout = 65000;
aseCommand.ExecuteNonQuery();
}
}
ASE 客户端 dll 的版本是 16.0.2.2。
非常感谢!
为了解决这个问题,我不得不从头开始创建一个新数据库,但这次我从一开始就给了它更多 space(1GB 而不是 6MB - 默认值)。
现在一切正常。
谢谢
我有一个只有一个 table 的新 SAP ASE 数据库,而这个 table 只有三列 - 两个 varchar 列和一个图像列。
使用取自 SAP ASE 数据库开发版的纯 ADO.NET 提供程序,我只是想用文件的内容向这个 table 中插入一条记录 - 我的第一次尝试是使用 3kb 文件,它就像一个魅力。然后,我拿了一个大约 900kb(肯定小于 1MB)的 PDF,应用程序给了我一个超时;更丑陋的是,不知何故,整个数据库都被阻塞了——我不得不重新启动服务以使其再次工作。
那么,现在让我们开始编写代码 - 如果有人可以引导我走向正确的方向,我将不胜感激。
static void Main(string[] args)
{
using (AseConnection aseConnection =
new AseConnection(
"data source=...;initial catalog=...;User ID=...;Password=...;Port=...;ConnectionIdleTimeout=600;CommandTimeOut=0;ConnectionTimeOut=0;Pooling=False;TextSize=10000000")
)
{
aseConnection.Open();
Console.WriteLine(aseConnection.State.ToString());
AseCommand setTextSizeCommand = new AseCommand("SET TEXTSIZE 10000000", aseConnection);
setTextSizeCommand.ExecuteNonQuery();
byte[] fileContent = File.ReadAllBytes(@"d:\adonet.pdf");
//byte[] fileContent = File.ReadAllBytes(@"d:\rack.txt");
AseCommand aseCommand = new AseCommand("insert into xxx(web_id, doc_name, doc_file) values(?, ?, ?)", aseConnection);
aseCommand.Parameters.Add(0, AseDbType.VarChar, 20).Value = "100";
aseCommand.Parameters.Add(1, AseDbType.VarChar, 100).Value = "fisier";
aseCommand.Parameters.Add(2, AseDbType.Image, fileContent.Length).Value = fileContent;
aseCommand.NamedParameters = false;
aseCommand.CommandTimeout = 65000;
aseCommand.ExecuteNonQuery();
}
}
ASE 客户端 dll 的版本是 16.0.2.2。
非常感谢!
为了解决这个问题,我不得不从头开始创建一个新数据库,但这次我从一开始就给了它更多 space(1GB 而不是 6MB - 默认值)。
现在一切正常。
谢谢