2015-03-18 2 views
0

Я пытаюсь подключиться к xlsx-файлу из процедуры CLR. Я запустил код в простой тестер (не clr, просто консольное приложение), и он работает. , но когда я пытаюсь запустить (тот же код), в SQL service management 2008, я получаю ошибку: «Unspecified error».C# CLR, не удается подключиться к файлу excel

здесь C# код:

[Microsoft.SqlServer.Server.SqlProcedure] 
public static void GetURLandQueueByCLID(SqlString phoneNumber, SqlString isDebug, string wsURL, out SqlInt32 queue, out SqlInt32 priority, out SqlString attData) 
{ 
string[] parameters = new string[3] { "", "", "" }; 
     try 
     { 
      DataTable sheetData = new DataTable(); 

      string filePath = @"C:\Excel_route_file\ms.xlsx"; 
      using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;HDR=YES;")) 
      { 
       Helper.WriteLogToDB("before open"); 
       conn.Open(); 

       OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [Sheet1$] where '0575271470' = phone", conn); 

       Helper.WriteLogToDB("before fill"); 
       sheetAdapter.Fill(sheetData); 

       parameters[0] = sheetData.Rows[0].ItemArray[1].ToString(); 
       parameters[1] = sheetData.Rows[0].ItemArray[2].ToString(); 
       parameters[2] = sheetData.Rows[0].ItemArray[3].ToString(); 

       conn.Close(); 
       conn.Dispose(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Helper.WriteLogToDB("fail to fill: " + ex.Message); 
     } 


     queue = SqlInt32.Parse(parameters [0]); 
     priority = SqlInt32.Parse(parameters [1]); 
     attData = parameters [2]; 
} 

не достигает conn.Open() :( это то, что в создании OleDbConnection

Creat процедура:.

CREATE PROCEDURE [dbo].[proName] 
    (@PHONENUMBER [nvarchar](MAX),@ISDEBUG [nvarchar](MAX),@WSURL [nvarchar] (MAX),@QUEUE INT OUTPUT ,@PRIORITY INT OUTPUT,@ATTDATA [nvarchar](MAX) OUTPUT) 

    WITH EXECUTE AS CALLER 
    AS 

    EXTERNAL NAME [assemblyName].[StoredProcedures].[GetURLandQueueByCLID] 
    GO 

СБОРКА создана с разрешением PERMISSION_SET = UNSAFE

Я также сделал это:

ALTER DATABASE MyDatabase SET TRUSTWORTHY ON 

и это:

sp_configure 'clr enabled',1 
GO 
RECONFIGURE 
GO 
sp_configure 'clr enabled' -- make sure it took 
GO 

Я не могу заставить его работать, помощь.

ответ

0

Да, проблема в создании OleDbConnection. Добавьте кавычки вокруг значения расширенных свойств.

new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=YES';") 
+0

Я не могу поверить, что это было, спасибо !!! – idan

Смежные вопросы