SQL Dependency Tự động trả dữ liệu về khi có thay đổi trong DB

SQL Dependency Tự động trả dữ liệu về khi có thay đổi trong DB

Sưu tầm được của một anh khá giỏi
SqlDependency Tự động trả dữ liệu về khi có thay đổi trong Database Source
Các bạn xem video xong rồi thì download source code nhé
source https://drive.google.com/open?id=0B4eaOrCGuAmPZ0lPUkppLTlyOXM
Nguon: a Nguyễn Cảnh Hưng

Advertisements

Serializing Json C# trong UWP

Tôi có một API như sau

http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=2de143494c0b295cca9337e1e96b00e0


{"coord":{"lon":138.93,"lat":34.97},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01n"}],"base":"stations","main":{"temp":279.45,"pressure":1018,"humidity":20,"temp_min":279.26,"temp_max":279.82},"wind":{"speed":0.51,"deg":40,"gust":1.03},"clouds":{"all":0},"dt":1451390210,"sys":{"type":3,"id":10354,"message":0.0088,"country":"JP","sunrise":1451339482,"sunset":1451374868},"id":1851632,"name":"Shuzenji","cod":200}

MainPage


<StackPanel Background="HotPink">;
<Button Content="Get Weather" Click="Button_Click"/>;
<TextBlock Name="ResultTextBox"/>;
< /StackPanel>;

Sử dụng http://json2csharp.com/ để biến đổi json thành class được


public class Coord
{
 public double lon { get; set; }
 public double lat { get; set; }
}

public class Weather
{
 public int id { get; set; }
 public string main { get; set; }
 public string description { get; set; }
 public string icon { get; set; }
}

public class Main
{
 public double temp { get; set; }
 public int pressure { get; set; }
 public int humidity { get; set; }
 public double temp_min { get; set; }
 public double temp_max { get; set; }
}

public class Wind
{
 public double speed { get; set; }
 public int deg { get; set; }
 public double gust { get; set; }
}

public class Clouds
{
 public int all { get; set; }
}

public class Sys
{
 public int type { get; set; }
 public int id { get; set; }
 public double message { get; set; }
 public string country { get; set; }
 public int sunrise { get; set; }
 public int sunset { get; set; }
}

public class RootObject
{
 public Coord coord { get; set; }
 public List&lt;Weather&gt; weather { get; set; }
 public string @base { get; set; }
 public Main main { get; set; }
 public Wind wind { get; set; }
 public Clouds clouds { get; set; }
 public int dt { get; set; }
 public Sys sys { get; set; }
 public int id { get; set; }
 public string name { get; set; }
 public int cod { get; set; }
}

Tạo Class OpenWeatherMapProxy.cs để xử lý các dữ liệu từ API

Copy đoạn code phía trên vào class và thêm

[DataContract]

[DataMember]

Sử dụng thư viện

using System.Runtime.Serialization;

Ta được


public class OpenWeatherMapProxy
{

}
[DataContract]
 public class Coord
 {
 [DataMember]
 public double lon { get; set; }
 [DataMember]
 public double lat { get; set; }
 }

 [DataContract]
 public class Weather
 {
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public string main { get; set; }
 [DataMember]
 public string description { get; set; }
 [DataMember]
 public string icon { get; set; }
 }
 [DataContract]
 public class Main
 {
 [DataMember]
 public double temp { get; set; }
 [DataMember]
 public int pressure { get; set; }
 [DataMember]
 public int humidity { get; set; }
 [DataMember]
 public double temp_min { get; set; }
 [DataMember]
 public double temp_max { get; set; }
 }
 [DataContract]
 public class Wind
 {
 [DataMember]
 public double speed { get; set; }
 [DataMember]
 public int deg { get; set; }
 [DataMember]
 public double gust { get; set; }
 }
 [DataContract]
 public class Clouds
 {
 [DataMember]
 public int all { get; set; }
 }
 [DataContract]
 public class Sys
 {
 [DataMember]
 public int type { get; set; }
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public double message { get; set; }
 [DataMember]
 public string country { get; set; }
 [DataMember]
 public int sunrise { get; set; }
 [DataMember]
 public int sunset { get; set; }
 }
 [DataContract]
 public class RootObject
 {
 [DataMember]
 public Coord coord { get; set; }
 [DataMember]
 public List<Weather> weather { get; set; }
 [DataMember]
 public string @base { get; set; }
 [DataMember]
 public Main main { get; set; }
 [DataMember]
 public Wind wind { get; set; }
 [DataMember]
 public Clouds clouds { get; set; }
 [DataMember]
 public int dt { get; set; }
 [DataMember]
 public Sys sys { get; set; }
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public string name { get; set; }
 [DataMember]
 public int cod { get; set; }
 }

Sử lý phương thức GetWeather


public class OpenWeatherMapProxy
{
public async static Task<RootObject> GetWeather(double lat,double lon)
{
var http = new HttpClient();
var response = await http.GetAsync("http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=2de143494c0b295cca9337e1e96b00e0");
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (RootObject)serializer.ReadObject(ms);
return data;
}
}

 

 

Unobtrusive Validation

Bài viết này sẽ hướng dẫn bạn hiển thị các cột nào cần có giá trị và những cột nào theo định dạng của nó

ss01

Code ban đầu:

<form class="form-horizontal" method="post">
<fieldset>
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
< input type="text" class="input-medium" id="name" name="name" ></div>
</div>
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="text" class="input-medium" id="email" name="email"></div>
</div>
<div class="control-group">
<label class="control-label" for="website">Website</label>
<div class="controls">
<input type="text" class="input-medium" id="website" name="website" ></div>
</div>
<div class="control-group">
<label class="control-label" for="comment">Message</label>
<div class="controls">
<textarea class="input-medium" id="comment" rows="3" name="comment" ></textarea>
"comment" data-valmsg-replace="true"></span></div>
</div>
<div class="form-actions">
<button type="submit" class="btn">Send</button>
@if (ViewBag.MailSent != null && ViewBag.MailSent)
{
<div>Mail Sent!</div>
}</div></fieldset>
</form>

Để đánh đấu thuộc tính quan trọng tôi thêm 2 thuộc


data-val="true" data-val-required="*"

 

Kết quả:

</pre>
<input type="text" class="input-medium" id="name" name="name" data-val="true" data-val-required="*">
<pre>

Nhưng để hiển thị thông báo ta phải thêm đằng sau ô nhập một đoạn code html như sau

</pre>
<input type="text" class="input-medium" id="name" name="name" data-val="true" data-val-required="*">
<span class="field-validation-valid" data-valmsg-for="name" data-valmsg-replace="true"></span>
<pre>

Nếu bạn muôn quy định định dạng cụ thể thuộc tính là Email bạn có thể ghi thêm thuộc tính cho input


data-val-email="Not Valid"

Tương tự đối với các ô nhập khác. Kết quả thu được sẽ như hình đầu tiên.

 

 

Bài 2: Xây đựng ứng dụng Cordova cho Windows Platflorm

Bài này sẽ tôi sẽ cho bạn thấy làm thế nào để thiết lập môi trường phát triển SDK để xây đựng và triển khai một ứng dụng Cordova cho windows 8, windows 8.1, windows Phone 8.1 và windows 10 Universal App Platform. Cũng như việc chỉnh sửa code trong Visual Studio.

Cấu hình cần thiết

Để phát triển ứng dụng cho nền tảng Windows, bạn cần:

  1. A Windows 8.1, 32 hoặc 64-bit machine (Home, Pro, hoặc Enterprise editions) with minimum 4 GB of RAM.
  2. Windows 8.0, 8.1 hoặc 10, 32 hoặc 64-bit Home, Pro, hoặc Enterprise editions, along with Visual Studio 2012 Express hoặc Visual Studio 2013. Chú ý Visual Studio 2015 không hỗ trợ build windows 8.0.

Để phát triển apps cho Windows 8.0 and 8.1 (bao gồm Windows Phone 8.1):

  1. Windows 8.1 hoặc Windows 10, 32 hoặc 64-bit Home, Pro, hoặc Enterprise editions, với Visual Studio 2013 Express hoặc cao hơn.
  2. Đối Windows Phone emulathors, Windows 8.1 (x64) Professional edition hoặc cao hơn, và a processor có hỗ trợ Client Hyper-V and Second Level Address Translation (SLAT).
  3. Visual Studio 2013 fhoặc Windows (Express hoặc cao hơn).

Để phát triển apps cho Windows 10:

  1. Windows 8.1 hoạc Windows 10 Technical Preview 2, 32- hoặc 64-bit, cùng với Visual Studio 2015 RC hoặc cao hơn.

Chú ý: Một ứng dụng xây đựng cho windows phone 8.1 có thể không chạy trên windows phone 8.0 nhưng một ứng dụng windows phone 8.0 có thể chạy trên windows phone 8.1

Phát triển một ứng dụng Cordova bạn sẽ sử dụng một PC chạy windows, nhưng bạn cũng có thể phát triên trên một PC Mac bằng cách chạy môi trường virtual machine hoặc sử dụng Boot Cap đẻ dual-boot một phân vùng Windows 8.1. Bạn có thể tham khảo các link sau đây:

Cài đặt SDK

Install bất kỳ edition của Visual Studio tương ứng với the version requirements listed phía trên.

Hinh00

Đối với Windows 10, trình cài đặt Visual Studio có một tùy chọn Universal Windows Apps. Hãy đảm bảo được lựa chọn khi yêu cầu cài đặt SDK.

Create một New Project

Tôi sẽ tạo một Project tên là HelloWorld và thêm Platform Windows

$cordova create hello com.example.hello HelloWorld
$cd hello
$cordova platform add windows

Mở project và Deloy App bằng Visual

Với việc xây dựng ứng dụng Cordova bạn có thể sử dụng Visual Studio để lập trình ứng dụng dễ dàng bằng cách mở tập tin .sln trong File Explorer.

Hinh01

Các thành phần của Cordova được hiển thị trong solution, và thư mục www chứa mã nguồn dựa trên web bao gồm trang chủ index.html.

Hinh02

Tôi có thể dễ dàng deloy ứng dụng một cách đơn giản như sau:

Hinh03

Kết quả

Hinh04

<Còn Tiếp>

A Client-side Command Line App in Python

import sys,requests,json

BASE_URL =’http://raps&#8217;

def printLightToconsole(light):
print(‘light {0} has house code of {1} and unit code of {2}’.
format(light[‘lightId’],light[‘houseCode’],light[‘unitCode’]))

def printSingleLight(lightId):
returnedJson = requests.get(BASE_URL+’/’+lightId).json()
printfSingleLight(returnedJson)

def printAllLights():
returnedJson = requests.get(BASE_URL).json()
for light in returnedJson[‘light’]
printLightToconsole(light)

def addLight(lightId,houseCode,unitCode):
lightsJson = json.dumps({“lightId”:lightId,”houseCode”:houseCode,”unitCode”:unitCode})
requestHeaders = {‘content-type’:’application/json’,’Accept’:’text/plain’}
requests.post(BASE_URL,data=lightsJson,headers=requestHeaders)
def setLightState(lightId,command):
requests.put(BASE_URL+’/{0}/{1}’.format(lightId,command))

def deleteLight(lightId):
requests.delete(BASE_URL+’/’+lightId)

def process(argv):
if(argv[0] == ‘getall’):
printAllLights()
elif(argv[0] == ‘get’)
printSingleLight(argv[1])
elif(argv[0] == ‘add’)
addLight(argv[1],argv[2],argv[3])
elif(argv[0] == ‘set’)
setLightState(argv[1],argv[2])
elif(argv[0] == ‘delete’)
deleteLight(argv[1])

if __name__ == ‘__main__’:
process(sys.argv[1:])

Using REST Verbs and JSON to Add or Remove Lights

import web
import json

from CM19aDriver import CM19aDrive

urls = (‘/message’,’hello’,
‘/lights/(on|off)’,’lights’,
‘/lights’,’lights’
‘/lights/(.*?)’,’lights’,
‘/lights/(.*?)’,’Error’,)
app = web.application(urls,globals())

class hello:
_mesage = json.dumps({})

def GET(self):
return json.dumps(hello._mesage)

def POST(self):
hello._mesage = json.loads(web.data())

class Lights:
_lightsJson = json.dumps({“lights”:[{“lighId”:”officeDesk”,”houseCode”:”A”,”unitCode”:”1″}]})

def GET(self,lighId = None)
if (lighId is None):
return json.dumps(self.retrieveLightsFromStore())
else
return json.dumps(self.getMatchingLight(lighId))

def POST(self):
newLight = json.loads(web.data())
fullJson = self.retrieveLightsFromStore()
currentLight = fullJson[‘lights’]
currentLight.append(newLight)
Lights._lightsJson = json.dumps(fullJson)

def DELETE(self,lighId):
jsonData = self.retrieveLightsFromStore
updateLights = [light for light in jsonData[‘lights’] if light[lighId] != lighId]
jsonData[‘lights’] = updateLights
self.writeLightsToStore(jsonData)

def PUT(self,lighId,command):

matchingLight = self.getMatchingLight(lighId)

cm19a – CM19aDrive();
retult = cm19a.send(matchingLight[‘houseCode’],matchingLight[‘unitCode’],command)
cm19a.finish()

def getMatchingLight(self, lighId):
jsonData = self.retrieveLightsFromStore()
matchingLight = next(node for node in jsonData[‘lights’] if node[lighId] == lighId)
return matchingLight
def retrieveLightsFromStore(self):
return json.loads(Lights._lightsJson)

def writeLightsToStore(self,pythonJson):
Lights._mesage = json.dumps(pythonJson)

class Error():
def PUT(self,command):
printf(“User enter invalid command: ” + command)

if __name__ == ‘__main__’:
app.run()

Laying out a Route Map Structure for Lights

1) add a Put method to indicate modification of state
2) Verify that we can hit the Put method
3) Invoke the CM19a Driver from Put method of lights on and off
4) Understand precedentce in route specification

import web
import json

from CM19aDriver import CM19aDrive

urls = (‘/lights/(on|off)’,’lights’)
app = web.application(urls,globals())

 

class lights:

def PUT(seft,command):
cm19a – CM19aDrive();
retult = cm19a.send(‘A’,’1′,command)
cm19a.finish()

if __name__ == ‘__main__’:
app.run()