在WindowsServices上进行SQL调用

时间:2017-03-30 15:55:18

标签: c# sql windows-services

我正在创建一个如下应用程序:我有一个在本地服务器上运行的web服务,这个webservice返回json,如下所示:

[{"Id":1,"Titulo":"Live to win","Link":"https://www.youtube.com/embed/DPHlGVe8wxI","BandaId":1,"BandaNome":"Paul Stanley","GeneroId":1,"GeneroNome":"Rock","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":false},{"Id":2,"Titulo":"Welcome to the jungle","Link":null,"BandaId":2,"BandaNome":"Guns n´ roses","GeneroId":1,"GeneroNome":"Rock","DtCriacao":"2017-03-23T16:42:54","CriadorId":2,"CriadorNome":"Usuário Teste","Ativo":true},{"Id":3,"Titulo":"Something just like this","Link":null,"BandaId":3,"BandaNome":"The Chainsmokers","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":4,"Titulo":"Beliver","Link":null,"BandaId":4,"BandaNome":"Imagine Dragons","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":5,"Titulo":"Radioactive","Link":null,"BandaId":4,"BandaNome":"Imagine Dragons","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":6,"Titulo":"Friends - Original Mix","Link":null,"BandaId":5,"BandaNome":"Steener","GeneroId":2,"GeneroNome":"EDM","DtCriacao":"2017-03-23T16:42:54","CriadorId":2,"CriadorNome":"Usuário Teste","Ativo":true},{"Id":7,"Titulo":"Amanheceu","Link":null,"BandaId":6,"BandaNome":"Scalene","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":2,"CriadorNome":"Usuário Teste","Ativo":true},{"Id":8,"Titulo":"Sonhador II","Link":null,"BandaId":6,"BandaNome":"Scalene","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":2,"CriadorNome":"Usuário Teste","Ativo":true},{"Id":9,"Titulo":"Amianto","Link":null,"BandaId":7,"BandaNome":"Supercombo","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":10,"Titulo":"Monstros","Link":null,"BandaId":7,"BandaNome":"Supercombo","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":11,"Titulo":"Piloto Automático","Link":null,"BandaId":7,"BandaNome":"Supercombo","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":2,"CriadorNome":"Usuário Teste","Ativo":true},{"Id":12,"Titulo":"Eutanásia","Link":null,"BandaId":7,"BandaNome":"Supercombo","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-23T16:42:54","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true},{"Id":13,"Titulo":"Shots - Broiler Remix","Link":null,"BandaId":4,"BandaNome":"Imagine Dragons","GeneroId":3,"GeneroNome":"Indie","DtCriacao":"2017-03-24T16:55:46","CriadorId":1,"CriadorNome":"Márcio Eric","Ativo":true}]

但是现在我需要创建一个与此WebService进行通信的Windows服务以及它在数据库中收到的内容,我花了一整天时间以多种方式进行此Web服务,但我没有找到任何关于Web服务等的良好实践。我会告诉你我做了什么,但是我想要一些关于Windows服务的提示,谢谢

这是我的代码

服务

private Timer _worker;
    private readonly int _interval = Convert.ToInt32(ConfigurationManager.AppSettings["timer"]);
    private readonly string _connection = ConfigurationManager.AppSettings["connection"];
    //private readonly Connector _usuarioConnector;
    private readonly Connector _bandaConnector;
    //private readonly Connector _generoConnector;
    private readonly Connector _musicaConnector;
    private SqlConnection conn;

    public Service1()
    {
        //_usuarioConnector = new Connector("UsuarioBase");
        _bandaConnector = new Connector("BandaBase");
        //_generoConnector = new Connector("GeneroBase");
        _musicaConnector = new Connector("MusicaBase");
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        _worker = new Timer((Update), null, 0, _interval);
    }

    protected override void OnStop()
    {

    }

    private void Update(Object state)
    {
        using (SqlConnection connection = new SqlConnection(
           _connection))
        {
            SqlCommand command = new SqlCommand("insert into Genero(nome, descricao, dtcriacao, criadorid, ativo) values('teste', 'teste', getdate(), 1, 1)", connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
            EventLog.WriteEntry("Query executada", EventLogEntryType.Warning);
        }
    }

装载机

public class Loader
{
    public static List<Usuario> LoadUsuarios(Connector usuarioConnector)
    {
        return (List<Usuario>)Newtonsoft.Json.JsonConvert.DeserializeObject(usuarioConnector.GetData(), typeof(List<Usuario>));
    }
    public static List<Banda> LoadBandas(Connector bandaConnector)
    {
        var bandasDtos = (List<BandaDto>)Newtonsoft.Json.JsonConvert.DeserializeObject(bandaConnector.GetData(), typeof(List<BandaDto>));
        return bandasDtos.Select(dto => dto.ConvertToBanda()).ToList();
    }
    //public static List<Genero> LoadGeneros(Connector generoConnector)
    //{
        //var musicasDtos = (List<MusicaDto>)Newtonsoft.Json.JsonConvert.DeserializeObject(musicaConnector.GetData(), typeof(List<MusicaDto>));
        //return musicasDtos.Select(dto => dto.ConvertToMusica()).ToList();
    //}
    public static List<Musica> LoadMusicas(Connector musicaConnector)
    {
        var musicasDtos = (List<MusicaDto>)Newtonsoft.Json.JsonConvert.DeserializeObject(musicaConnector.GetData(), typeof(List<MusicaDto>));
        return musicasDtos.Select(dto => dto.ConvertToMusica()).ToList();
    }
}

连接器

 private string Host { get; }
    private WebRequest _request;
    public WebResponse Response;
    public string ConnectionStatus;
    private Stream _dataStream;
    private StreamReader _reader;

    public Connector(string config)
    {
        Host = ConfigurationManager.AppSettings[config];

    }

    public string GetData()
    {
        StartConnection();
        _dataStream = Response.GetResponseStream();
        _reader = new StreamReader(_dataStream);
        var toReturn = _reader.ReadToEnd();
        EndConnection();
        return toReturn;
    }

    private void StartConnection()
    {
        _request = WebRequest.Create(Host);
        _request.Credentials = CredentialCache.DefaultCredentials;
        Response = _request.GetResponse();
        ConnectionStatus = (((HttpWebResponse)Response).StatusDescription);
    }

    private void EndConnection()
    {
        _reader.Close();
        Response.Close();
    }

Edit1 在当前代码中,它正在执行select,但是我打算这样做会插入

1 个答案:

答案 0 :(得分:0)

我发现,遗憾的是计时器无法正常工作,所以我只是把它改成了一个线程。