#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 или ссылка на сборку?) »