Database.ExecuteNonQuery不返回

时间:2010-04-15 17:07:45

标签: c# sql-server timeout sqlcommand varbinary

我有一个非常奇怪的问题。当我使用SqlCommand.ExecuteNonQuery从C#执行特定的数据库存储过程时,我的存储过程永远不会被执行。

此外,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防火墙来解决此问题。

1 个答案:

答案 0 :(得分:0)

之前我曾经通过一个工作站通过存储过程上传XML来看过这个

我们改变了网络电缆(在我们的大楼里布线不同)并且工作正常。

这听起来很奇怪,你能以某种方式重新安装服务器或更换电缆或绕过交换机等。