c # select запрос не работает с параметрами - PullRequest
1 голос
/ 05 ноября 2011

Я столкнулся с такой ситуацией, когда этот оператор SQL не работает ..

command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@OA_Name]";

но этот оператор SQL работает, когда я изменил ['@OA_Name'] на просто значение, найденное в таблице.

command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = ['OA 101']";

Я проверил значение, полученное от obj.GetOperatingauthority (), и оно точно такое же, как в базе данных. Я использовал reader.hasrows, чтобы проверить, возвращены ли какие-либо строки ..

Кстати, я использую C # и доступ к базе данных 2010 года.

edit: я вставил большую часть кода ниже:

        using (var command = connection.CreateCommand())
        {
            connection.Open();
            command.CommandType = CommandType.Text;

            command.Parameters.AddWithValue("@NRIC", obj.GETnricfinnumber());
            command.Parameters.AddWithValue("@Participant_Name", obj.GETname());
            command.Parameters.AddWithValue("@Gender", obj.GETgender());
            command.Parameters.AddWithValue("@DOB", obj.GETdateofbirth());
            command.Parameters.AddWithValue("@Nationality", obj.GETnationality());
            command.Parameters.AddWithValue("@Race", obj.GETrace());
            command.Parameters.AddWithValue("@Residential_Address", obj.GETresidentialaddress());
            command.Parameters.AddWithValue("@Contact_Number", obj.GETcontactnumber());
            command.Parameters.AddWithValue("@Email_Address", obj.GETemailaddress());

            command.CommandText = "SELECT [NRIC] FROM [Participant_Table] WHERE [NRIC] = [@NRIC]";
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (reader.GetString(0).ToLower().Equals(obj.GETnricfinnumber().ToLower()))
                    {
                        message.show(1, "", "exists");
                        //return false;
                    }   
                }
            }

            command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
            command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());

            using (var reader = command.ExecuteReader())
            {
                if (!reader.HasRows)
                {
                    message.show(1, "", "no rows!"); return false; //to test whether has rows or no rows
                }

edit 2: getOperatingAuthority не может быть неправильным, поскольку в основном это система с "замкнутым циклом", в которой OA_Name используется для заполнения комбинированного списка, а значения, выбранные из этого поля со списком, используются для обращения к таблице для получения ID.

Ответы [ 3 ]

1 голос
/ 05 ноября 2011

Попробуйте удалить удаляющие скобки @OA_Name.

command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
0 голосов
/ 05 ноября 2011

Попробуйте протестировать:

command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + obj.GEToperatingauthority() + "]";

Не так элегантно, но сработает, если нет, то это определенно проблема с

command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());

ПРАВКА - ОК в ответкомментарий: теперь попробуйте это:

command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + "'" + obj.GEToperatingauthority() + "'" + "]";

, если это работает, то отсутствие ''

0 голосов
/ 05 ноября 2011

Измените это на:

Попробуйте сначала проверить, имеет ли значение obj.GEoperatingauthority ().

 command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";

  var getoperation = Convert.ToString(obj.GEToperatingauthority());
     command.Parameters.AddWithValue("@OA_Name", getoperation );
 //use this for checking      

  var dt = new DataTable();

   var da = new SqlDataAdapter(command);

    connection.Open();

   da.Fill(dt);

   if(dt.Rows.Count > 0)
   {
     //records found
   }
   else
   {
      //No records Found
   }

Привет

...