Проблема с параметрами SqlCommand - PullRequest
0 голосов
/ 18 января 2012

Когда я выполняю следующий запрос в SSMS, я получаю ожидаемый результат, то есть '1'

SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';

Однако, когда SqlCommand создается кодом в моем приложении, происходит сбой ExecuteScalar (он просто вызывает выход метода без сообщения об ошибке).

public int GetID(string paramUser, DateTime paramDate)
    {
        string strSql = "SELECT TSID " +
                        "FROM tblTimesheets " +
                        "WHERE TSUser = @TSUser AND TSDate = @TSDate;";

        string strConnection = BuildConnectionString();
        SqlConnection linkToDB = new SqlConnection(strConnection);
        linkToDB.Open();

        SqlCommand sqlCom = new SqlCommand(strSql, linkToDB);
        sqlCom.Parameters.Add("@TSUser", SqlDbType.Text);
        sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
        sqlCom.Parameters["@TSUser"].Value = paramUser;
        sqlCom.Parameters["@TSDate"].Value = paramDate;


        int intResult = (Int32)sqlCom.ExecuteScalar();
        linkToDB.Close();
        return intResult;
    }

Я прошел по коду и могу подтвердить, что параметры PJW и 2012-01-18 соответствуют требованиям, но ExecuteScalar возвращает все данные, которые, как я знаю, должны быть там, на основе моего сопоставимого запроса в SSMS.

Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 18 января 2012

Вы говорите, что ExecuteScalar терпит неудачу без сообщения об ошибке.Оберните ваш код в блок try-catch, чтобы убедиться, что все исключения, которые могут выдаваться ExecuteScalar(), будут перехвачены.

Кроме этого, попробуйте и сделайте, как предложили другие, и просмотрите SQL, созданный с использованием SQL Profiler, затемзапустить этот SQL в SSMS для сравнения результатов.

1 голос
/ 18 января 2012
SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';

Здесь U r передает точную дату в качестве параметра

Где, когда при передаче параметра в хранимую процедуру вы передаете "DateTime paramDate"

Переменная даты и времени

Может быть, вам нужно проанализировать точный формат даты, поддерживаемый хранимой процедурой, т.е. вам нужно отформатировать переменную paramDate в «ГГГГ-мм-ДД»

Я не уверен .. Попробуйтеэто .. и ответьте, если это помогает или нет!

1 голос
/ 18 января 2012

Если параметр относится к типу БД date, рекомендуется использовать защитную часть времени при настройке параметра следующим образом:

sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
sqlCom.Parameters["@TSDate"].Value = paramDate.Date;

Пожалуйста, дайте мне знать, если это не такпомогите, и я удалю свой ответ.

1 голос
/ 18 января 2012

Вместо SqlDbType.Text попробуйте выполнить одно из следующих действий, в зависимости от типа столбца:

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