我已經編寫了一個返回XML的存儲過程。當我在SQL Server管理工作室中運行存儲過程時,它會根據需要返回xml,但是,當我在C#代碼中運行它時,不會返回xml。我的代碼如下所示:SQL Server存儲過程不會在VS C#中返回結果,但會在SQL Server中執行
using (SqlConnection conn = new SqlConnection(connStr)) {
using (SqlCommand cmnd = new SqlCommand("dbo.spMyStoredProcXML", conn)) {
cmnd.CommandType = CommandType.StoredProcedure;
cmnd.Parameters.Add("@Param1", SqlDbType.VarChar, 50);
cmnd.Parameters["@Param1"].Value = "Some value";
//more parameters...
conn.Open();
XmlReader xrdr = cmnd.ExecuteXmlReader();
//do stuff...
}
}
我已簽了,我創建的用戶的權限,他們是這樣的: 在服務器級別,在登錄屬性對話框中,在用戶映射,我已經映射用戶訪問正確的數據庫,然後「檢查」公共db_datareader,db_datawriter,然後將它們添加到db_owner角色。
在數據庫級別,我也進入了數據庫用戶對話框的「安全性」部分,並明確給出用戶授予權限和授予權限以執行相關存儲過程。我還爲用戶明確選擇了「授予」權限以刪除,插入,選擇和更新數據庫中的所有表。
還是,當「XmlReader xrdr = cmnd.ExecuteXmlReader();」行運行時,xrdr變量是空的。沒有錯誤報告。有人可以提出一些建議,我還需要檢查什麼?
在此先感謝您提供的任何幫助。
這裏是存儲過程的簡化版本(在SQL Server Management Studio中完美的作品):
CREATE PROCEDURE [dbo].[spGetXML]
(@param1 varchar(50), @param2 varchar(1))
AS BEGIN
SET NOCOUNT ON;
with xmlnamespaces ('http://schemas.xmlsoap.org/soap/encoding/' as SOAP_ENC)
select
d.Col1,
d.Col2,
from MyTable d
where d.Col1 = @param1 and
d.Col2 = @param2
FOR XML PATH('ObjectName'), root('DOCUMENT'), type
END
你有兩個數據庫嗎?並可能訪問錯誤的? –
你可以發佈程序嗎?如果沒有繼續下去,這是非常具有挑戰性的。 –
運行Sql Profiler。查詢是否正在執行?它是否返回適當的值? – stuartd