我是新LightSwitch中,我要完成以下任務:的LightSwitch執行選擇存儲過程來顯示數據
在我的分貝我有一個存儲過程,顯示(一個選擇SP)的一些數據,怎麼能我從lightswitch中調用這個sp來顯示從sp中檢索的數據?
在此先感謝。
我是新LightSwitch中,我要完成以下任務:的LightSwitch執行選擇存儲過程來顯示數據
在我的分貝我有一個存儲過程,顯示(一個選擇SP)的一些數據,怎麼能我從lightswitch中調用這個sp來顯示從sp中檢索的數據?
在此先感謝。
這似乎是一個合理的任務,但Lightswitch並不容易。 只是爲了幫助你走好,這裏有一些提示:
簡要概述是:您可以在Lightswitch中定義一個自定義實體(或表)。它可以代表任何事物。 如果您的sp採用參數,通常建議爲參數創建列。 這個想法是,你有一個命令按鈕或被調用。在MyButton_Execute()
覆蓋中,您將值插入表中(您可以撥打workspace.ApplicationData.MyCustomTable.AddNew()
,設置值並致電Save_Changes()
)。 然後你攔截保存管道:MyCustomTable_Inserting(MyCustomTable entity)
方法。在這裏,你編寫你的ado.net代碼來調用sp。然後,攻擊者可以撥打this.Details.DiscardChanges()
......您並不是真的添加了新行......您只是使用管道訪問了可以注入自定義ado代碼的點。
現在,顯示結果有點棘手。通常,想法是您的sp更新了一些基礎表,並且如果刷新了屏幕,則更新的數據將顯示在這些相關表的控件中。
要捕獲並顯示sp的實際結果,您必須進行實驗。也許你的屏幕將'MyCustomTable'顯示爲一個集合,並且如果它返回結果集,則將sp輸出捕獲到同一個實體。或者,如果它返回一行,也許你可以手動更新一些鏈接到文本框的屏幕參數....正如我所說的,Lightswitch並不容易,因爲它沒有跟蹤調用sp作爲表格實體已被修改。另外請注意,如果嘗試在ado調用完成後更新屏幕,則您將處於不同的線程中。可能你最好的選擇是在你的實際數據庫中有一張表,它接收sp的輸出,然後讓Lightswitch簡單地將結果表視爲其他表。您可能需要添加某種標識符,以便您可以過濾當前屏幕以僅顯示特定於該屏幕的sp調用結果。祝你好運。
謝謝,我也在網站上和網站上找到了這個nullrefrenceexception/\ given,但是感謝提示(做命令,因爲我不能upvote) –
我已經找到一種方法來解決這個問題,或者至少一些網站,告訴你如何:
摘要:
你有你的工作通過一個RIA WCF庫繞過它(看上面的帖子),然後在lightswitch應用程序中添加這個「class」作爲參考。比讓一個對象獲得你的sp所給出的數據。
我是如何解決這個
我所做的,我做我的選擇 SP爲插入 SP和使用該SP將數據插入到一個空表。什麼,你需要做的就是創建一個不同的表爲您的SP本身去 這樣做,你可以將此代碼添加到您的數據源後:
partial void StoredProcedureDefinitions_Inserting(StoredProcedureDefinition entity)
{
using (SqlConnection connection = new SqlConnection())
{
string connectionStringName = this.DataWorkspace.dbsMSccData.Details.Name;
connection.ConnectionString =
ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
string procedure = entity.Procedure;
using (SqlCommand command = new SqlCommand(procedure, connection))
{
command.CommandType = CommandType.StoredProcedure;
//foreach (var item in entity.StoredProcedureParameters)
//{
// command.Parameters.Add(
// new SqlParameter(item.ParameterName, item.ParameterValue));
//}
connection.Open();
command.ExecuteNonQuery();
}
}
this.Details.DiscardChanges();
}
與此代碼添加到您的屏幕:
partial void Overzicht_project_telling_Created()
{
DataWorkspace dataWorkspace = new DataWorkspace();
var operation = dataWorkspace.ApplicationData.StoredProcedureDefinitions.AddNew();
//operation.Database = "dbMSccData";
operation.Procedure = "dbo.Overzicht_Project_telling_s001";
dataWorkspace.ApplicationData.SaveChanges();
this.Refresh();
}
應該做的伎倆
我希望這是有用的。 -corards Corwin
糾正我,如果我錯了,但這是我從你的知識中獲得的。 –
我發現了另一種方法來解決這個問題。我目前的解決方案大量使用SP層。所以爲了能夠獲得傳遞給LS的複雜SP的結果,我只是讓TSQL表函數運行SP。然後用簡單的select *從該函數添加SQL View。 LS允許導入視圖。工作得很好。
要強制LS將字段視爲主鍵,您可以使用ISNULL([field], - 1)。
要強制LS爲不將作爲PK使用NULLIF一個字段([場], '')
入住這http://www.rssbus.com/kb/articles/ado-lightswitchria.rst – NullReferenceException
@NullReferenceException感謝,截至目前即時通訊試試這個,它似乎真的提示 –
其實,[這個MSDN文章](http://msdn.microsoft.com/en-us/library/vstudio/jj635144.aspx)是一個小更接近源,並且不涉及對第三方庫的引用。 – mdisibio