2010-04-15 68 views
2

我有一个很奇怪的问题。当我使用SqlCommand.ExecuteNonQuery从C#执行特定的数据库存储过程时,我的存储过程从不执行。Database.ExecuteNonQuery不返回

此外,SQL事件探查器根本没有注册该命令。我没有收到命令超时,也没有引发任何怀疑。

最奇怪的是,这段代码在1,200,000次以上工作正常,但对于这个插入数据库的特定文件,它只是永远挂起。

当我终止应用程序时,我在数据库服务器的事件日志中收到此错误:"A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0).这使我认为数据库服务器正在接收命令,尽管SQL Profiler另有说明。

我知道设置了适当的权限,并且连接字符串是正确的,因为这段代码和存储过程对其他文件可以正常工作。

下面是调用存储过程的代码,注意到我试图插入的文件是33.5MB,但是我添加了超过10,000个大于500MB的文件可能很重要,所以我不认为大小问题:

using (SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["TheDatabase"].ConnectionString)) 
using (SqlCommand command = sqlconn.CreateCommand()) 
{ 
    command.CommandText = "Add_File"; 
    command.CommandType = CommandType.StoredProcedure; 
    command.CommandTimeout = 30 //should timeout in 30 seconds, but doesn't... 
    command.Parameters.AddWithValue("@ID", ID).SqlDbType = SqlDbType.BigInt; 
    command.Parameters.AddWithValue("@BinaryData", byteArr).SqlDbType = SqlDbType.VarBinary; 
    command.Parameters.AddWithValue("@FileName", fileName).SqlDbType = SqlDbType.VarChar; 
    sqlconn.Open(); 
    command.ExecuteNonQuery(); 
} 

有进行调用的服务器和数据库服务器之间没有防火墙和Windows防火墙已经被禁用,以解决此问题。

+0

您是否尝试运行存储过程,看看它是否在那里工作? – Ocelot20 2010-04-15 17:32:04

回答

0

我通过一个存储过程从一个工作站上载XML时见过这个曾经只

我们改变了网络电缆(这在我们的大建筑路由不同)和它的工作。

奇怪的,因为这听起来,你能以某种方式重新安装服务器或改变电缆或直接与相同的输入旁路开关等