using (var cmd = new SqlCommand("SELECT * FROM Customers"))
{
cmd.CommandTimeout = 60000;
...
}
является синтаксическим сахаром для
var cmd = new SqlCommand("SELECT * FROM Customers");
try
{
cmd.CommandTimeout = 60000;
...
}
finally
{
if (cmd != null)
cmd.Dispose();
}
Поэтому, когда люди говорят вам, что «использование» является заменой для try / catch / наконец, они подразумевают, что вы должны использовать форму длинной руки но добавьте в свой блок catch:
var cmd = new SqlCommand("SELECT * FROM Customers");
try
{
cmd.CommandTimeout = 60000;
...
}
catch (Exception ex)
{
...//your stuff here
}
finally
{
if (cmd != null)
cmd.Dispose();
}
Невозможно подключиться, если он существует только в памяти. OLE также исключен (хотя использование Office Automation для серверного приложения изначально плохо спроектировано).
Единственный способ, который я могу придумать, - это прочитать двоичные данные Excel самостоятельно - например, использовать SpreadSheetGear.Net с чем-то вроде :
SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(*stream*);
Как сказал Рич Би в своем ответе, я не думаю, что возможно подключиться стандартным способом ado.net к файлу Excel, который просто зависает в памяти. Самым простым решением, вероятно, было бы на самом деле сохранить файл Excel на диск, подключиться к нему с помощью движка Jet со строкой подключения, а затем, когда вы закончите выполнение всех своих задач, избавиться от файла. Возможно, это не идеальный вариант с точки зрения производительности, но ему не хватает той определенной WTFiness, которая заставила бы вас выдергивать волосы.
Я не думаю, что это можно сделать с помощью простой строки подключения.
Если вам нужна помощь с файлом Excel на диске: http://connectionstrings.com/excel-2007
В общем: http://connectionstrings.com/