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' ";


а то это вырвиглаз полный
  • Вопрос задан
  • 29200 просмотров
Решения вопроса 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, без кучи кавычек.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы