Команда SQL, возвращающая ноль для значения - PullRequest
0 голосов
/ 11 июня 2019

Ранее я был знаком только с Linq и т.п. для доступа к данным.Сейчас я работаю над чем-то, что требует от меня использования реальных команд SQL на серверной части, чтобы вернуть одно значение.Мой код компилируется и запускается, однако он возвращает ноль для значения, которое, как я знаю, должно возвращать что-то, кроме пустой строки ...

На этом моя структура отключена?Или чего-то еще не хватает?

Ниже мой код:

  internal string GetSexDescription(string sex, int id_merchant)
    {
        string newSex = "";

        var builder = new ConnectionStringHelper();
        var connString = builder.getCasinoDBString(id_merchant);

        using (SqlConnection conn = new SqlConnection(connString))
        {
            string sql = "SELECT Description FROM person_gender_lookup WHERE ID = @sex";

            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;

                newSex = cmd.ExecuteScalar().ToString();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return newSex;
        }
    }

Вот изображение набора результатов таблицы:

enter image description here

Ответы [ 4 ]

2 голосов
/ 11 июня 2019

Открыть соединение.

internal string GetSexDescription(string sex, int id_merchant)
{
   string newSex = "";

   var builder = new ConnectionStringHelper();
   var connString = builder.getCasinoDBString(id_merchant);

   using (SqlConnection conn = new SqlConnection(connString))
   {
      conn.Open(); //<- This line here.
      string sql = "SELECT Description FROM person_gender_lookup WHERE ID = @sex";

      SqlCommand cmd = new SqlCommand(sql, conn);
      try
      {
         cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;

         newSex = cmd.ExecuteScalar().ToString();
      }
      catch(Exception ex)
      {
         Console.WriteLine(ex.Message);
      }

      return newSex;
   }
}

cmd.ExecuteScalar(), вероятно, выдает InvalidOperationException, потому что вы не открыли соединение. Исключение перехватывается, выводится на консоль, затем возвращается начальное значение newSex, поскольку вызов ExecuteScalar выбросил.

1 голос
/ 11 июня 2019

ID это int или varchar?Если int, используйте:

cmd.Parameters.Add("@sex", SqlDbType.Int).Value = sex;

вместо:

cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;

PS Параметры запроса и добавление параметра в cmd. Параметры чувствительны к регистру.

Запись

@sex

вместо

@Sex
0 голосов
/ 11 июня 2019

Разобрался. Пришлось открыть cmd и закрыть его ПОСЛЕ того, как я установил для переменной newSex значение, которое вы тянет.

   internal string GetSexDescription(string sex, int id_merchant)
    {
        string newSex = "";

        var builder = new ConnectionStringHelper();
        var connString = builder.getCasinoDBString(id_merchant);

        DataSet ds = new DataSet();

        using (SqlDataAdapter adapter = new SqlDataAdapter())
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                string sql = "SELECT Description FROM person_gender_lookup WHERE ID = @Sex";

                SqlCommand cmd = new SqlCommand(sql, conn);
                try
                {
                    conn.Open();
                    cmd.Connection = conn;
                    adapter.SelectCommand = cmd;
                    cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;
                    adapter.Fill(ds);

                    newSex = cmd.ExecuteScalar().ToString();

                    conn.Close();

                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

                return newSex;
            }
        }

    }
0 голосов
/ 11 июня 2019

Попробуйте это:

internal string GetSexDescription(string sex, int id_merchant)
{
    string newSex = "";

    var builder = new ConnectionStringHelper();
    var connString = builder.getCasinoDBString(id_merchant);

    using (SqlConnection conn = new SqlConnection(connString))
    {
        string sql = "SELECT Description FROM person_gender_lookup WHERE ID" +  sex;;

        SqlCommand cmd = new SqlCommand(sql, conn);
        try
        {


            newSex = cmd.ExecuteScalar().ToString();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

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