WCF и ошибка SQL - PullRequest
       1

WCF и ошибка SQL

3 голосов
/ 29 февраля 2012

Я создаю простой сервис WCF, который должен возвращать некоторые данные из таблицы SQL.Когда я запускаю проект, я получаю следующую ошибку:

Не удалось вызвать службу.Возможные причины: служба недоступна или недоступна;конфигурация на стороне клиента не соответствует прокси;существующий прокси-сервер недействителен.Обратитесь к трассировке стека для более подробной информации.Вы можете попытаться восстановить, запустив новый прокси-сервер, восстановив конфигурацию по умолчанию или обновив службу

Если я прокомментирую всю часть SQL и отправлю некоторые статические данные, все работает нормально.Эта функция вызывает у меня головную боль:

public Client getClient(int idClient)
{
    Client c = new Client();
    SqlConnection sql = new SqlConnection(@"Data Source=GRIGORE\SQLEXPRESS;Initial Catalog=testWCF;Integrated Security=True");
    sql.Open();

    SqlCommand cmd = new SqlCommand("Select * from Clienti where id = " + idClient);
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        c.idClient = int.Parse(dr["id"].ToString());
        c.numeClient = dr["nume"].ToString();
    }

    dr.Close();
    sql.Close();

    return c;
}

Идеи?

Ответы [ 2 ]

6 голосов
/ 29 февраля 2012

Вы не устанавливаете свойство Connection своего экземпляра SqlCommand. Вам нужно сделать это:

    SqlCommand cmd = new SqlCommand("Select * from Clienti where id = " + idClient);
    cmd.Connection = sql;  // added Connection property initialization
    SqlDataReader dr = cmd.ExecuteReader();

Или вы можете просто вставить это в ваш конструктор:

    SqlCommand cmd = new SqlCommand("...your query text", sql);
3 голосов
/ 29 февраля 2012

На самом деле ваш код должен выглядеть примерно так:

public Client getClient(int idClient)
{
    var c = new Client();
    using (var sql = new SqlConnection(@"Data Source=GRIGORE\SQLEXPRESS;Initial Catalog=testWCF;Integrated Security=True"))
    {
        sql.Open();

        using (var cmd = new SqlCommand("Select * from Clienti where id = " + idClient, sql))
        {
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read())
                {
                    c.idClient = int.Parse(dr["id"].ToString());
                    c.numeClient = dr["nume"].ToString();
                }
            }
        }
    }

    return c;
}

Размещая соединение, команду и считыватель в блоках using, вы обеспечиваете их удаление, даже если выдается исключение. В этом случае вам также не нужны явные вызовы Close, поскольку удаление объектов позаботится об этом за вас.

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