我有一個存儲過程。數據集數據與存儲過程不同
SELECT ADDRESS.ADDRESSID, NAME, DOORNO, STREET, STATE, COUNT(SUB.ADDRESSID) AS FREQUENCY
FROM ADDRESS
JOIN
(
(SELECT ADDRESSID FROM ADDRESS WHERE KEYWORD LIKE '%' + @name + '%')
UNION ALL
(SELECT ADDRESSID FROM ADDRESS WHERE KEYWORD LIKE '%' + @doorno + '%')
UNION ALL
(SELECT ADDRESSID FROM ADDRESS WHERE KEYWORD LIKE '%' + @street + '%')
UNION ALL
(SELECT ADDRESSID FROM ADDRESS WHERE KEYWORD LIKE '%' + @state + '%')
)
SUB
ON SUB.ADDRESSID=ADDRESS.ADDRESSID
GROUP BY ADDRESS.ADDRESSID, NAME, DOORNO, STREET, STATE
ORDER BY FREQUENCY DESC
當我手動執行此操作時,我得到正確的結果。 可以說這些都是結果
╔════╦══════╦════════════════╦═════════════════════╦═══════╦═══════════╗
║ ID ║ NAME ║ DOORNO ║ STREET ║ STATE ║ FREQUENCY ║
╠════╬══════╬════════════════╬═════════════════════╬═══════╬═══════════╣
║ 4 ║ John ║ 29 ║ Police Station ║ DC ║ 3 ║
║ 1 ║ John ║ Door 13-9-16/A ║ patimeeda ║ NJ ║ 2 ║
║ 3 ║ Paul ║ Plot 304 ║ Near Police Station ║ NJ ║ 1 ║
╚════╩══════╩════════════════╩═════════════════════╩═══════╩═══════════╝
但是,當我打電話使用的SqlDataAdapter從C#代碼這個SP和數據集,我總是得到頻率1 像下面。
╔════╦══════╦════════════════╦═════════════════════╦═══════╦═══════════╗
║ ID ║ NAME ║ DOORNO ║ STREET ║ STATE ║ FREQUENCY ║
╠════╬══════╬════════════════╬═════════════════════╬═══════╬═══════════╣
║ 1 ║ John ║ Door 13-9-16/A ║ patimeeda ║ NJ ║ 1 ║
║ 3 ║ Paul ║ Plot 304 ║ Near Police Station ║ NJ ║ 1 ║
║ 4 ║ John ║ 29 ║ Police Station ║ DC ║ 1 ║
╚════╩══════╩════════════════╩═════════════════════╩═══════╩═══════════╝
排序對我來說非常重要。任何想法,爲什麼我失去了這一點?
C#.NET代碼
SqlCommand cmd = new SqlCommand("Add_GetAddressSearchResults", con);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar, 50).Value=addressModel.Name;
cmd.Parameters.Add("@doorno", SqlDbType.VarChar, 50).Value=addressModel.DoorNo;
cmd.Parameters.Add("@street", SqlDbType.VarChar, 50).Value=addressModel.Street;
cmd.Parameters.Add("@state", SqlDbType.VarChar, 50).Value=addressModel.State;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds= new DataSet();
da.Fill(ds);
ds.WriteXml("c:/ram.xls"); // to check the data
你可以在你調用過程的地方添加代碼嗎? –
您確定sqldataadapter正在與同一個服務器,同一個命名實例,同一個數據庫,調用相同的sp,並且特別是sp的相同**版本**?一個常見的錯誤是在SQL工具(SSMS)中運行'rams.my_proc',但通過sql-data-adapter或類似工具運行'dbo.myproc'。 –
@MarcGravell我只有一個服務器和數據庫,我相信我正在執行正確的過程。我有同樣的疑問,我試着將FREQUENCY列的名稱更改爲FREQUENCI,並進行了測試以符合我正在與同一個DB進行交談。這很奇怪..! – Robert