Отображение результата запроса в зависимости от пользовательского ввода

#c# #.net #web-services

#c# #.net #веб-сервисы

Вопрос:

Я работаю над кодом в C#.NET чтобы создать веб-сервис, который будет принимать определенные входные данные. Затем он подключится к базе данных, где в зависимости от предоставленного ввода весь результат должен быть извлечен из моей таблицы и отображен соответствующим образом.

Однако я не настолько знаком с C#.NET и поэтому я не могу правильно реализовать свой код. может кто-нибудь, пожалуйста, помогите мне

Вот что я сделал до сих пор:

        using System;
       using System.Collections;
       using System.ComponentModel;
       using System.Data;
       using System.Linq;
       using System.Web;
       using System.Web.Services;
       using System.Web.Services.Protocols;
       using System.Xml.Linq;
       using System.Data.SqlClient;

  namespace test3
     {
          /// <summary>
      /// Summary description for Service1
       /// </summary>
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
  // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
   // [System.Web.Script.Services.ScriptService]
   public class Service1 : System.Web.Services.WebService
   {
      [WebMethod]
        public String GetAttendance(String rollno)
       {
          String result="";


          try
           {
              using (SqlConnection myConnection = new SqlConnection(@"Data Source=.SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
            {

                myConnection.Open();

                using (SqlCommand myCommand = new SqlCommand())
                {

                    myCommand.Connection = myConnection;
                    myCommand.CommandText = "SELECT COUNT(*) FROM studentdata WHERE rollno = @rollno";


                    myCommand.Parameters.Add("@rollno", SqlDbType.VarChar).Value = rollno;

                    SqlDataReader myReader = myCommand.ExecuteReader();
                    while (myReader.Read())
                    {
                       result = myReader.ToString();

                    }

                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return "an error occured";
        }

        return resu<
     }

   } 

}
  

Если я запускаю этот код, я получаю вывод как «System.Data.SqlClient.SqlDataReader», что не то, что я хочу

Ответ №1:

Не используйте для этого средство чтения данных, у вас есть только один результат, который является количеством строк, поэтому используйте ExecuteScalar() и используйте int как тип для результата:

 int result = Convert.ToInt32(myCommand.ExecuteScalar());
  

(В качестве альтернативы вы можете получить строковое значение с помощью вашего текущего запроса, используя result = myReader.GetInt32(0).ToString(); — не делайте этого, хотя)

Комментарии:

1. я. я пытался это сделать, но теперь он попадает в блок catch .. и вывод «произошла ошибка»

2. Что такое сообщение об исключении?

3. Исключение первого случая типа ‘System. InvalidCastException’ произошло в System.Data.dll

4. @Parth_90: это потому, что ваш запрос возвращает int, а не строку, поэтому вы не можете использовать GetString() — используйте ExecuteScalar() вместо или используйте myReader.GetInt32().ToString() (не рекомендуется)

5. Когда я использовал код, упомянутый u, я получаю следующее: «Ошибка 1 ‘System.Data.SqlClient.SqlDataReader’ не содержит определения для ‘ExecuteScalar’ и не удалось найти метод расширения ‘ExecuteScalar’, принимающий первый аргумент типа ‘System.Data.SqlClient.SqlDataReader’ (выотсутствует директива using или ссылка на сборку?) »