2014-09-24 6 views
-1

net и im создание веб-службы, в которой пользователь регистрируется, а затем регистрируется. Я создал базу данных. в которых «ИД», «Имя пользователя», «Пароль». в webserive он показывает, какой пользователь является логином . этот код не работает (name = reader [0] .ToString(); return name;) name - красная линия. плз объяснить или сделать коррекцию, что это неправильно, когда им спутатьподключение webservice к серверу sql

здесь моя строка соединения

<connectionStrings> 
     <add connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Abdul Samad\Documents\Visual Studio 2013\Projects\WebApplication8\WebApplication8\App_Data\webserver_database.mdf;Integrated Security=True" name="webconnectionstr"/> 
</connectionStrings> 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace WebApplication8 
{ 
    /// <summary> 
    /// Summary description for WebService1 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.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 WebService1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 
     [WebMethod] 
     public int Register(string name , string password) 
     { 
      SqlConnection connection = new SqlConnection(); 
      try 
      { 
       connection.ConnectionString = ConfigurationManager.ConnectionStrings["webconnectionstr"].ToString(); 
       connection.Open(); 
       SqlCommand cmd = new SqlCommand(@"insert into [userTable] (username,password) values 
        ('" + name + "','" + password + "')", connection); 
       cmd.ExecuteNonQuery(); 
       return 1; 
      } 

      catch(Exception ex) { 
       return 0; 
      } 
      finally 
      { 
       connection.Close(); 
      } 

     } 
     [WebMethod] 
     public int getUsername(int id) 
     { 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["webconnectionstr"].ToString(); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(@"select username from [userTable] where userId='" + id + "'", con); 
      SqlDataReader reader = cmd.ExecuteReader(); 
      while (reader.Read()) 
      { 
       name = reader[0].ToString(); 
      } 
      return cmd; 
      con.Close(); 
     } 
    } 
} 
+0

Почему u возвращает cmd вместо имени? Метод getUsername должен возвращать строку, а не int. Не могли бы вы рассказать нам, какая ошибка дает вам код? И вы уверены, что запрос sql возвращает данные? – Nacho

+0

Этот код будет невероятно уязвим для SQL-инъекций. Это практически попрошайничество, чтобы его взломали. Также: не храните пароли в своей базе данных; хранить пароль _hashes_. –

+0

им новый в этом просто для обучения –

ответ

0

Вы должны вернуть строку (Предполагая, что вы пытаетесь вернуть имя из таблицы.)

[WebMethod] 
     public string getUsername(int id) 
     { 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["webconnectionstr"].ToString(); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(@"select username from [userTable] where userId='" + id + "'", con); 
      SqlDataReader reader = cmd.ExecuteReader(); 
string str = ""; 
      while (reader.Read()) 
      { 
       str = reader[0].ToString(); 
      } 
      con.Close(); 
      return str; 

     } 

Редактировать: лучший вариант, так как вы хотите только одно значение.

string str = cmd.ExecuteScalar().ToString(); 
+0

спасибо u @abdul Rehman –

Смежные вопросы