Aiza Pro Ответов: 3

Строка запроса в SQL команде C#


Подробная страница:
string qid = Page.RouteData.Values["id"].ToString();


string cs = ConfigurationManager.ConnectionStrings["cs"].ToString();
       SqlCommand cmd = new SqlCommand("SELECT [name], [family], [path] from [tbl_t] WHERE id= + qid");
       SqlConnection con = new SqlConnection(cs);
       cmd.CommandType = CommandType.Text;
       con.Open();
       SqlDataReader dr = cmd.ExecuteReader();
       while (dr.Read())
       {
           this.lblname.Text = (dr["name"].ToString());
           this.lblfamily.Text = (dr["family"].ToString());
       }
       cmd.Dispose();
       con.Close();
       con.Dispose();


Что я уже пробовал:

извините меня за мой плохой английский , я надеюсь, что меня поймут
Я хочу позвонить (Sqlcommand)
) значение как id (querystring)

PIEBALDconsult

Пожалуйста, изучите параметризованные утверждения. Не используйте конкатенацию строк для формирования SQL-оператора.

Aiza Pro

Я отправил параметр запроса в качестве своего идентификатора. Но моя проблема не решена.Я посылаю неправильные параметры?
Извините за мой плохой английский

Patrice T

В чем вопрос ?

Aiza Pro

Я отправил параметр запроса в качестве своего идентификатора. Но моя проблема не решена.Я посылаю неправильные параметры?
Извините за мой плохой английский

3 Ответов

Рейтинг:
8

Wendelius

Одна вещь, на которую уже указывалось, - это параметризация. Это защитит вас от SQL-инъекций и поможет с конверсиями.

Что еще не было упомянуто, так это использование using заявление и try блоки. И то, и другое очень важно для того, чтобы ваши объекты были правильно расположены, даже если возникнет исключение, и чтобы вы правильно обрабатывали исключения.

Для получения дополнительной информации взгляните на Правильное выполнение операций с базой данных[^]


Рейтинг:
22

Peter Leow

Научитесь делать правильные вещи правильно: Дайте мне параметризованный SQL или дайте мне смерть[^]


Aiza Pro

благодарить.Я отправил параметр запроса в качестве своего идентификатора. но..
Дополнительная информация: ExecuteReader: свойство соединения не было инициализировано.



строка qid = запрос.QueryString ["id"];
lblid.Текст = qid;

строка cs = ConfigurationManager.ConnectionStrings ["cs"].Метод toString();
Команда sqlcommand команду cmd = новый sqlcommand, который
("Выберите [имя], [семья], [путь] из [tbl_t], где id=@id");
УМК.Параметры.Добавить (новый SqlParameter ("id", qid));
SqlConnection con = новый SqlConnection(cs);
УМК.CommandType = CommandType. Text;
против.Открыть();
SqlDataReader dr = cmd.Метода executereader();
в то время как (dr. Read())
{
этот.lblname.Text = (dr ["имя"].Метод toString());
это.lblfamily.Text = (dr ["семья"].Метод toString());
}
УМК.Располагать();
против.Закрывать();
против.Располагать();

Peter Leow

Объект cmd не инициализируется соединением. Видишь https://www.dotnetperls.com/sqlcommand или
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader (v=vs.110). aspx для примеров.

Рейтинг:
13

Patrice T

Догадываюсь, что qid это ваш параметр, который вам нужно заменить:

SqlCommand cmd = new SqlCommand("SELECT [name], [family], [path] from [tbl_t] WHERE id= + qid");

с
SqlCommand cmd = new SqlCommand("SELECT [name], [family], [path] from [tbl_t] WHERE id= "+ qid);

или
SqlCommand cmd = new SqlCommand("SELECT [name], [family], [path] from [tbl_t] WHERE id= '+ qid+"'");

в зависимости от значения qid
Обратите внимание на цитату в конце.

То, как вы строите запрос, опасно и открывает дверь для SQL-инъекции.
SQL-инъекция[^]
SQL-инъекция-Википедия[^]