Как выполнить команду SQL в службе Windows? - PullRequest
0 голосов
/ 05 апреля 2019

Итак, я создал сервис в моей программе. Мне нужен этот сервис для обновления моей таблицы. Это должно работать как проверка отчетов о доставке смс сообщений.

Так что в этом сервисе я хотел бы выполнить API из шлюза SMS для получения данных, а затем вставить их в таблицу журнала в SQL.

Мне удалось создать таймер в сервисе с некоторыми обновлениями EventLog. Так что мой сервис жив, но проблема в том, что когда я пытаюсь что-то сделать с моим сервером sql, он, вероятно, ничего не выполняет, и я действительно не знаю почему.

услуга:

    public partial class Service1 : ServiceBase
{
    private int eventId = 1;
    DataSet ds = new DataSet();
    SqlConnection cs = new SqlConnection("Data Source=lvrabel; Initial Catalog=EagleTest; Integrated Security=TRUE;");
    SqlDataAdapter da = new SqlDataAdapter();



    public Service1()
    {
        InitializeComponent();

        eventLog1 = new EventLog();
        if (!EventLog.SourceExists("MySource"))
        {
            EventLog.CreateEventSource("MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";
    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("In OnStart");

        Timer timer = new Timer();
        timer.Interval = 60000; // 60 seconds
        timer.Elapsed += new ElapsedEventHandler(this.GetReports);
        timer.Start();          
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("In OnStop.");
    }

    public void OnTimer(object sender, ElapsedEventArgs args)
    {
        // TODO: Insert monitoring activities here.
       // eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);
    }

    public void GetReports(object sender, ElapsedEventArgs args)
    {
        //SqlCommand selectTelephone = new SqlCommand("select telephone from Contacts where LASTNAME = 'test'", cs);
        //cs.Open();
        //SqlDataAdapter da = new SqlDataAdapter(selectTelephone);
        //DataTable dt = new DataTable();
        //da.Fill(dt);

        //foreach (DataRow dr in dt.Rows)
        //{
        //    eventLog1.WriteEntry(dr["telephone"].ToString(), EventLogEntryType.Information, eventId++);
        //}
        //cs.Close();


        cs.Open();
        da.InsertCommand = new SqlCommand("insert into Log(IDContacts, IDEvent, Description, smsID) VALUES('5', '3', 'SMS OUT', '123')", cs); // dodelat id contacts

        da.InsertCommand.ExecuteNonQuery();
        cs.Close();
    }
}

Есть ли возможность, как я могу устранить неполадки в обслуживании или вы видите какие-либо ошибки в моем коде? (атм у меня там только insertCommand. Я добавлю http api к коду позже)

https://imgur.com/a/O5T78E2 - imgur образ моих инсталляторов в сервисе

ДОБАВЛЕННОЕ РЕШЕНИЕ:

Так что вся проблема была в привилегиях пользователя. Я использовал локальный системный сервис вместо сетевого сервиса. Теперь все работает.

1 Ответ

1 голос
/ 11 апреля 2019

Если у вас есть соответствующие разрешения в вашей системе, вы можете активно отлаживать службу, пока она работает, чтобы увидеть, какие исключения могут возникать. Вы можете сослаться на принятый ответ здесь или просто сделать следующий вызов в вашем OnStart() обратном вызове:

System.Diagnostics.Debugger.Break();

Когда вы запускаете службу, вы должны получить подсказку о том, что произошло необработанное исключение.

enter image description here

Выберите параметр «Да», ответьте «Да» на приглашение UAC, выберите, какой экземпляр Visual Studio вы хотите использовать, и затем выполните обычную отладку. Надеемся, что это даст более четкое представление о том, что происходит, вместо того, чтобы догадываться.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...