У меня есть WebService со следующим методом:C# SQLCommand не работают
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string Login(string passwort, string email, string firma)
{
return LoginHelper.Login(passwort, email, firma);
}
Моего LoginHelper код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace WebService1
{
public class LoginHelper
{
public static string Login(string passwort, string email, string firma)
{
string userName = "";
SqlConnection con = new SqlConnection(@"Data Source=Yeah-PC\SQLEXPRESS;Initial Catalog=works;Integrated Security=true;");
SqlCommand cmd = new SqlCommand(@"SELECT firma FROM TestData
WHERE email = @email", con);
cmd.Parameters.AddWithValue("@email", email);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
//userName += dr["email"].ToString();
//userName += dr["passwort"].ToString();
userName += dr["firma"].ToString();
}
dr.Close();
con.Close();
return userName;
}
}
}
Спасибо за это помощью Guys
Я отредактированный мои вопросы. Защищено ли это решение? Я имею в виду против SQL-инъекции. Есть ли что-то еще, что я могу сделать лучше?
Первое, что вы делаете неправильно, это объединение строк SQL. Вместо этого вы должны использовать параметры запроса. – David
Для этого вы должны использовать параметризованный SQL; ваш код, написанный в настоящее время, уязвим для атаки SQL-инъекций. Я бы сделал это изменение первым; есть шанс, что проблема исчезнет, когда вы это сделаете. –
Вы также не можете поместить свои SqlConnection, SqlCommand и SqlDataReader в блоки 'using', и вы используете веб-службы ASMX, когда вы должны использовать WCF, если у вас нет выбора. –