des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

C# экранирование кавычек?

вопрос достаточно простой. как при запросе к базе экранировать двойные кавычки и как быть с длинными строками?
string sql = "SELECT  \"ID_TagName\", \"F_ComPort\", \"F_ComPortBaudRate\", \"F_ComQuery\", \"F_ParseFunction\", \"F_TagReadTime\", \"F_AnswerLenght\", \"F_AnswerKey\", ";
                sql += "\"F_AnswerKeyPosition\", \"F_ComPortIPAdress\", \"F_ComPortParity\", \"F_ComPortDataBits\", \"F_ComPortStopBit\", \"F_ComPortFlowControl\", ";
                sql += "\"F_ComPortTimeOut\" FROM \"SC_Tag\".\"T_TagName\" as tn,\"SC_Tag\".\"T_HardWareTag\" as hw , \"SC_Tag\".\"T_RealHardWare\" as rh where ";
                sql += "rh.\"ID_RealHardWare\" = hw.\"F_RealHardWare_ID\" and tn.\"F_HardWare_ID\" = hw.\"F_TagName_ID\" and lower(\"F_ServerName\") =lower(\'" + my_name + "\') and \"F_ComPortIPAdress\" = '127.0.0.1' ";


а то это вырвиглаз полный
  • Вопрос задан
  • 29615 просмотров
Решения вопроса 1
des1roer
@des1roer Автор вопроса
ученье - свет, а неученье - приятный полумрак
волшебная собака всему голова. правда кавычки нужно дважды писать
string sql = @"SELECT ""ID_TagName"",
                                   ""F_ComPort"",
                                   ""F_ComPortBaudRate"",
                                   ""F_ComQuery"",
                                   ""F_ParseFunction"",
                                   ""F_TagReadTime"",
                                   ""F_AnswerLenght"",
                                   ""F_AnswerKey"",
                                   ""F_AnswerKeyPosition"",
                                   ""F_ComPortIPAdress"",
                                   ""F_ComPortParity"",
                                   ""F_ComPortDataBits"",
                                   ""F_ComPortStopBit"",
                                   ""F_ComPortFlowControl"",
                                   ""F_ComPortTimeOut""
                            FROM ""SC_Tag"".""T_TagName"" AS tn,
                                 ""SC_Tag"".""T_HardWareTag"" AS hw,
                                 ""SC_Tag"".""T_RealHardWare"" AS rh
                            WHERE rh.""ID_RealHardWare"" = hw.""F_RealHardWare_ID""
                              AND tn.""F_HardWare_ID"" = hw.""F_TagName_ID""                              
                              AND ""F_ComPortIPAdress"" = '127.0.0.1'
                              AND lower(""F_ServerName"") =lower('" + Name + "')";
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
newross
@newross
Product owner
А почему не пользуетесь параметрами запроса? И код будет читабельный, в отличие от того что сейчас, и с экранированием проблем меньше будет.

string commandText = "UPDATE Sales.Store SET Demographics = @demographics WHERE CustomerID = @ID;";
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
command.Parameters.AddWithValue("@demographics", demoXml);
Ответ написан
@Dzhamal
.NET разработчик
В sql запросах названия таблиц и столбцов не надо заключать в кавычки. Если название таблицы/столбца совпадает с зарезервированным, например User - пишешь название в квадратных скобках (example [User]).
Длинные строки можно писать с переносом так:
var longString = "long string "
				+ "long string "
				+ "long string";
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
В перечислении полей в select не обязательно их в кавычки заключать, как и имена таблиц (за исключением, когда совпадают с зарезервированными выражениями SQL). вполне прекрасно работает такой запрос SELECT Id,Name,EMail,Age,City FROM Sample.dbo.Users, без кучи кавычек.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы