Выберите параметр командной строки - PullRequest
0 голосов
/ 31 декабря 2011

Как правильно объявить параметр в коде ниже. Я получаю подчеркивание на "SelectCommand" Я не уверен, что я делаю неправильно.

 public int GetTotalNumberOfAprovedPictureIds(string SexType)
    {
        string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"];

        SqlConnection conn = new SqlConnection(strConectionString);
        conn.Open();
        SqlCommand oCommand = new SqlCommand("SELECT COUNT(1) AS Expr1 FROM MEMBERS INNER JOIN Picture ON MEMBERS.MemberID = Picture.MemberID WHERE (Picture.PicAproval = 1) AND (Picture.PicArchive = 0) AND (MEMBERS.MemberSex = @dSexType)", conn);


        object oValue = oCommand.ExecuteScalar();

        oCommand.SelectCommand.Parameters.Add("@dSexType", SqlDbType.Text);
        oCommand.SelectCommand.Parameters["@dSexType"].Value = SexType;

        conn.Close();

        if (oValue == DBNull.Value)
        {
            return 0;
        }
        else
        {
            return Convert.ToInt32(oValue);
        }

    }

Ответы [ 3 ]

4 голосов
/ 31 декабря 2011

Вы делаете пару вещей неправильно;

1) Вы добавляете параметр ПОСЛЕ того, как выполняете запрос

2) Вы используете свойство SelectCommand, когда вам это не нужно. Фактически, вы, вероятно, путаете это с объектом DataAdapter , который имеет свойство SelectCommand.

Вместо этого попробуйте:

    public int GetTotalNumberOfAprovedPictureIds(string SexType)
    {
        string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"];

        using (SqlConnection conn = new SqlConnection(strConectionString))
        {
            conn.Open();
            using (SqlCommand oCommand = new SqlCommand("SELECT COUNT(*) FROM MEMBERS INNER JOIN Picture ON MEMBERS.MemberID = Picture.MemberID WHERE (Picture.PicAproval = 1) AND (Picture.PicArchive = 0) AND (MEMBERS.MemberSex = @dSexType)", conn))
            {
                oCommand.CommandType = CommandType.Text;
                SqlParameter myParam = oCommand.Parameters.Add("@dSexType", SqlDbType.Text);
                myParam.Value = SexType;

                object oValue = oCommand.ExecuteScalar();

                if (oValue == DBNull.Value)
                {
                    return 0;
                }
                else
                {
                    return Convert.ToInt32(oValue);
                }
            }
        }

    }

Я настоятельно рекомендую вам использовать оператор "USING" при работе с SqlConnection, SqlCommand и аналогичными объектами. Это обеспечит закрытие и удаление вашего соединения, как только он покинет область действия, в том числе после исключения.

0 голосов
/ 31 декабря 2011
oCommand.Parameters.Add("@dSexType", SqlDbType.Text);
oCommand.Parameters["@dSexType"].Value = SexType;

SelectCommand не имеет таких свойств.Используйте прямо как указано выше.

0 голосов
/ 31 декабря 2011

Насколько мне известно SqlCommand не имеет свойства или поля с именем SelectCommand.Просто избавься от этого:

oCommand.Parameters.Add("@dSexType", SqlDbType.Text);
oCommand.Parameters["@dSexType"].Value = SexType;
...