2011-11-25 108 views
2

我想從SQL Server 2008使用GSM調制解調器的AT命令發送短信,所以我寫了一個Visual C#SQL CLR數據庫項目和一個存儲過程。從SQL Server 2008 R2發送帶GSM調制解調器的SMS

但是,當我執行該存儲過程,我收到此錯誤:

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

存儲過程的源代碼和發送短信的類是這些:

[Microsoft.SqlServer.Server.SqlProcedure] 
public static void SendSMS2(string phone, string message) 
{ 
    SMSManagement.SM2S ss = new SMSManagement.SM2S(); 
    ss.SendMessage(phone, message); 
} 

public void SendMessage(string PhoneNumber, string Message) 
{ 
    try 
    { 
     SerialPort port = new SerialPort(); 

     port.PortName = "COM5";     
     port.BaudRate = 115200;     
     port.DataBits = 8;     
     port.StopBits = StopBits.One;  
     port.Parity = Parity.None;   
     port.ReadTimeout = 300;   
     port.WriteTimeout = 300;   

     // Error occurred in here. 
     port.Open(); 
     port.DtrEnable = true; 
     port.RtsEnable = true; 

     SMS sms = new SMS(); 
     sms.Direction = SMSDirection.Submited; 
     sms.PhoneNumber = PhoneNumber; 
     sms.ValidityPeriod = new TimeSpan(4, 0, 0, 0); 
     sms.Message = Message; 

     Message = sms.Compose(SMS.SMSEncoding.UCS2); 

     ExecCommand(port, "AT", 300, "No phone connected"); 
     ExecCommand(port, "AT+CMGF=0", 300, "Failed to set pdu format."); 
     ExecCommand(port, "AT+CMGS=1", 300, "Failed to set message length."); 
     string command = Message + char.ConvertFromUtf32(26); 
     ExecCommand(port, command, 6000, "Failed to send message"); 

     port.Close(); 
    } 
    catch (Exception ex) 
    { 
     SqlContext.Pipe.Send(ex.Message); 
    } 
} 

的Visual Studio版本而SQL Server是2010 SP1和2008 R2。 CLR項目框架是2.0。

+0

你是如何將CLR程序集安裝到SQL Server中的?你使用了什麼命令和什麼設置? –

+0

我將它部署到SQL Server中的我的數據庫中,並將它顯示在「程序集」列表中。 – ABI

+0

是的 - 當然 - 但是**如何部署它?直接從Visual Studio ??然後查看我的答案並檢查您的設置。或者你用T-SQL腳本部署它('CREATE ASSEMBLY ......') - 然後請向我們展示該腳本! –

回答

1

你沒有提到你如何將你的程序集安裝到SQL Server中。如果你直接從Visual Studio部署 - 你指定了什麼權限級別?

enter image description here

默認值是Safe,這是好的,只要你只在SQL Server中的工作 - 正則表達式匹配或類似的東西。

如果你想從SQL Server來「伸手」,並與世界溝通,你必須設置Permission LevelUnsafe您部署組裝到SQL Server之前。

+0

我改變了它,但是在部署時我收到了這個錯誤:部署錯誤SQL01268:.Net SqlClient數據提供程序:消息10327,級別14,狀態1,行1創建彙編'SMSManagement'的彙編失敗,因爲彙編'SMSManagement'未被授權對於PERMISSION_SET =不安全。如果滿足以下任一條件,則會授權程序集:數據庫所有者(DBO)具有UNSAFE ASSEMBLY權限,並且數據庫具有TRUSTWORTHY數據庫屬性;或者該程序集使用證書或非對稱密鑰進行簽名,該證書具有與UNSAFE ASSEMBLY權限相對應的登錄名。 – ABI

+0

@ABI:你是否檢查過這些要求?您的數據庫所有者是否具有所需的權限?數據庫是否有'TRUSTWORTHY'標誌設置? –

+1

我設置了TRUSTWORTHY標誌,但收到「主數據庫中記錄的數據庫所有者SID不同於...」的錯誤。我修復了這個錯誤。現在工作很好。謝謝。 – ABI