I have created a site with the following connection string.
I am getting the following error message any help would be really appreciated.
Compiler Error Message: CS1009: Unrecognized escape sequence
Line 21: ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
my codes:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class html_Show_Projinfo : System.Web.UI.Page
{
OleDbCommand cmd;
OleDbConnection con = new OleDbConnection();
OleDbDataReader rd;
protected void Page_Load(object sender, EventArgs e)
{
int id = Convert.ToInt32(Request.QueryString["id"]);
con.ConnectionString = ConfigurationManager.ConnectionStrings["pearl"].ToString();
cmd = new OleDbCommand("Select * from Pearl_Projects where ProjectId=" + id, con);
con.Open();
rd = cmd.ExecuteReader();
string ns;
while (rd.Read())
{
Label2.Text = rd["ProjectName"].ToString();
ns = rd["Shortdes"].ToString();
if (ns.Length > 541)
{
Label1.Text = ns.Substring(0, 541);
}
else
{
Label1.Text = ns.Substring(0, ns.Length);
}
Label3.Text = rd["Description"].ToString();
Label4.Text = rd["location"].ToString();
}
rd.Close();
con.Close();
//con.Open();
//cmd = new OleDbCommand("Select ProjectId from Pearl_ProjectDetails where DetailId=" + id, con);
//int j = Convert.ToInt32(cmd.ExecuteScalar());
//con.Close();
//con.Open();
//cmd = new OleDbCommand("Select ProjectName from Pearl_Projects where ProjectId=" + j, con);
//Label1.Text = cmd.ExecuteScalar().ToString();
//con.Close();
if (Label4.Text == "")
{
Label4.Visible = false;
Label5.Visible = false;
}
else
{
Label4.Visible = true;
Label5.Visible = true;
}
AccessDataSource ad = new AccessDataSource();
ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
ad.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=no Order by ProjectId Desc";
DataList1.DataSource = ad;
DataList1.DataBind();
AccessDataSource ad1 = new AccessDataSource();
ad1.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
ad1.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=yes Order by ProjectId Desc";
DataList2.DataSource = ad1;
DataList2.DataBind();
}
}
ekad
14.4k26 gold badges44 silver badges46 bronze badges
asked Jul 3, 2013 at 19:36
0
escape those in lines like the following
ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
you can either manually escape them all like so
ad.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";
or you can make it a literal string
ad.DataFile = @"D:Hosting9372580htmlpearlPearl.mdb";
the character ''
begins what is called an «Escape Sequence», and it essentially that you’re using 2 characters to represent 1(special) character.
for instance, n
is a newline character, is null, and
\
is
answered Jul 3, 2013 at 19:38
0
answered Jul 3, 2013 at 19:40
AM_HawkAM_Hawk
6611 gold badge15 silver badges33 bronze badges
I know that there are few questions with answers with the same title, but I couldn’t find my answer there.
I am getting this error when I moved my code from my other computer. On the other computer the application was working fine. I tried to debug the code without success.
Line 45: BeginContext("~/Views/_ViewStart.cshtml", 0, 57, true);
Line 46:
Line 47: WriteLiteral ("\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
Line 48:
Line 49: EndContext("~/Views/_ViewStart.cshtml", 0, 57, true);
Содержание
- Строка в C#
- Создание строк в C#
- Строки с регулярными и буквальными литералами
- Неизменяемость строк в C#
- Итого
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Большое количество задач (если не большинство) при разработке программного обеспечения так или иначе связано с обработкой строк будь то простой вывод в консоль определенных значений, сравнение строк или парсинг текста web-страниц. Так или иначе, даже при первом знакомстве с языком программирования, первое, что мы делаем — это используем строки («Hello world» и т.д.). Именно поэтому умение работы со строками в C#, как и в любом другом языке программирования, является одним из необходимых и важных навыков программиста. В этой и нескольких последующих статьях мы рассмотрим основные возможности работы со строками в C#.
Строки в C# относятся к неизменяемым типам данных и представляют собой объекты класса System.String
. Объекты этого класса представляют текст в виде последовательности символов Unicode. То есть, в отличие от Delphi, где есть и UnicodeString и AnsiString и т.д. и т.п, в C# строка — это всегда набор символов Unicode. Однако, при необходимости, никто не мешает нам изменять кодировку символов в строке C# и об этом мы тоже поговорим.
Также, для тех, кто уже имел дело с другими языками программирования, не лишним будет знать, что в конце строки C# нет нуль-символов. Поэтому строка в C# мы можем создавать строки, которые содержат любое количество внедренных нуль-символов (). При этом, максимальный размер объекта String в памяти составляет 2 Гб.
Создание строк в C#
Объявление и создание строк в C# можно осуществить несколькими способами. Рассмотрим основные из них.
string str1; //объявили переменную типа string str1 = "Привет";//присвоили строке значение //объявили и создали строку из двух символов 'a' string str2 = new String('a', 2); //объявили и создали строку из массива символов char[] letters = { 'H', 'e', 'l', 'l', 'o' }; string helloString = new string(letters); //объявили и создали пустую строку string emptyStr = string.Empty;
В любом из представленных выше примеров мы создаем строку, при этом, в последнем случае, мы создаем пустую строку без символов. Так как строки относятся к ссылочным типам данных, то никто нам не запрещает присвоить строке значение null
string nullStr = null;
хотя, разработчики C# и предупреждают нас о том, что использование string.Empty
вместо null
предпочтительнее и снижает вероятность получения исключения типа NullReferenceException
.
Строки с регулярными и буквальными литералами
Отдельное внимание при создании строк также стоит уделить такому моменту, как создание строк, содержащих какие-либо служебные символы. Например, если вам необходимо присвоить строке значение, указывающее на путь к файлу: c:Program Filesdotnetdotnet.exe
. Если вы попробуете присвоить строке это значение как есть, то ваша программа даже не будет скомпилирована, так как Visual Studio укажет вам на ошибку:
Ошибка CS1009 Нераспознанная escape-последовательность
Все дело в том, что символ обратной косой черты используется в строках для указания так называемых escape-последовательностей и для того, чтобы создать строку, содержащую символ
нам необходимо либо регулярный строковый литерал, либо буквальный литерал, как показано ниже:
//использование регулярного литерала string path = "c:\Program Files\dotnet\dotnet.exe"; //использование буквального литерала string path2 = @"c:Program Filesdotnetdotnet.exe";
Использование регулярного литерала позволяет нам использовать различные escape-последовательности в строках. В таблице ниже представлены основные escape-последовательности в C#:
Escape-последовательность | Имя символа | Кодировка Юникод |
’ | Одинарная кавычка | 0x0027 |
» | Двойная кавычка | 0x0022 |
\ | Обратная косая черта | 0x005C |
Null | 0x0000 | |
a | Предупреждение | 0x0007 |
b | Backspace | 0x0008 |
f | Перевод страницы | 0x000C |
n | Новая строка | 0x000A |
r | Возврат каретки | 0x000D |
t | Горизонтальная табуляция | 0x0009 |
v | Вертикальная табуляция | 0x000B |
u | Escape-последовательность Юникода (UTF-16) | uHHHH (диапазон: 0000–FFFF; пример: u00E7 = «ç») |
U | Escape-последовательность Юникода (UTF-32) | U00HHHHHH (диапазон: 000000–10FFFF; пример: U0001F47D = «👽») |
x | Escape-последовательность Юникода аналогична «u», она отличается только длиной переменной | xH[H][H][H] (диапазон: 0–FFFF; пример: x00E7 или x0E7 или xE7 = «ç») |
Например, используя escape-последовательности, мы можем вывести в консоль таблицу:
//выводим в консоль таблицу 3х3 Console.WriteLine("НомерtЗначениеtОписание"); Console.WriteLine("1t0,1ttописание 1"); Console.WriteLine("2t0,2ttописание 2"); Console.WriteLine("3t0,3ttописание 3");
В итоге, в консоли мы увидим вот такую красивую табличку:
Что касается использования буквального литерала в строках, то его удобно использовать для того, чтобы сделать строки, содержащие какие-либо служебные символы, более читабельными. Согласитесь, что такая строка:
string path2 = @"c:Program Filesdotnetdotnet.exe";
выглядит более читабельной, чем вот такая:
string path = "c:\Program Files\dotnet\dotnet.exe";
Более того, так как буквальный литерал позволяет сохранять все символы в строке как есть, то, используя его, мы можем использовать в наших строках переносы, кавычки и прочие символы как есть, например:
//использование буквального литерала string str = @"Эта строка содержит символ , а также одинарные кавычки 'текст в кавычках' и переносы строки ";
В результате, в консоли мы увидим следующий текст:
Неизменяемость строк в C#
Как уже упоминалось выше, строки в C# относятся к неизменяемым типам данных. Что это значит для нас? А это значит, что при каждом присвоении значения переменной типа string система вначале освобождает память, занятую строкой, а затем выделяет по новой и только потом записывает новое значение. С одной стороны, подобный подход выглядит нерациональным — лишние освобождения и выделения памяти, но, с другой стороны, таким образом разработчики C# обеспечили максимальную безопасность работы со строками и, надо сказать, сделали это достаточно элегантно и понятно. Например,
string str4; //объявили переменную str4 = "hello"; //выделили память под 5 символов и присвоили значение переменной str4 = "hello world";//освободили память, по новой выделили память уже под 11 символов и присвоили новое значение
Также стоит отметить, что когда содержимое двух строк, например, s1
и s2
объединяется для формирования строки, то две исходные строки не изменяются. Например:
string s1 = "Hello "; string s2 = "world"; s1 += s2; Console.WriteLine(s1);
В примере выше оператор +=
создает новую строку, которая содержит объединенное содержимое двух строк. Этот новый объект присваивается переменной s1
, а исходный объект, который был присвоен s1
, освобождается для сборки мусора, так как ни одна переменная не ссылается на него.
Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Пример:
string s1 = "Hello "; string s2 = s1; s1 += "World"; Console.WriteLine(s2);
В представленном примере может показаться, что в итоге, в консоли будет строка "Hello world"
, однако, на самом деле в консоли мы увидим только "Hello "
так как строка s2
остается неизменной.
Итого
Сегодня мы узнали как создавать строки в C#, как использовать различные escape-последовательности в строках, а также использовать буквальный литерал для повышения читабельности строк в C#. Также рассмотрели некоторые моменты, касающиеся неизменности строк в C# и как эта неизменность проявляется.
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Я пытался создать свое решение для веб-приложения, и каждый раз я получаю этот код из файла Index.g.cshtml.cs, и когда я перехожу к файлу, строка, вызывающая проблему, выглядит так:
WriteLiteral("rn </div>rn </div>rnrn <div class="col-md-3">rn <p>This is a fun site to do some buying of dutch products.</p>rn </div> ");
Может кто-нибудь, пожалуйста, помогите, это действительно расстраивает …
Ответы
2
вы можете использовать
WriteLiteral(@"rn </div>rn </div>rnrn <div class="col-md-3">rn <p>This is a fun site to do some buying of dutch products.</p>rn </div> ");
Когда я пишу ваш код, он имеет синтаксическую ошибку «,» ожидается (перед col-md-3) и неожиданный символ после col-md-3
— Kristijan Vidojkovic
11.10.2018 22:41
WriteLiteral (@ » r n </div> r n </div> r n r n <div class = » «col — md — 3 » «> r n <p > Это забавный сайт, где можно купить голландские товары. </p> r n </div> «) ;
— Code First
11.10.2018 22:52
Это ничего не меняет. Как только я что-то меняю в Index.cshtml, он возвращается к предыдущему состоянию и снова вызывает ту же проблему.
— Kristijan Vidojkovic
11.10.2018 22:57
Index.g.cshtml.cs — это автоматически сгенерированный файл. Откройте файл Index.cshtml и найдите маленькие волнистые красные линии, указывающие на ошибку. Ошибка, вероятно, исходит из конца строки (после тега закрытия div), где у вас есть все эти обратные косые черты. Удалите эти обратные косые черты или, если они вам действительно нужны, удвойте их все («\» в коде фактически отобразит для вашего пользователя)
<div class = «col-md-3»> <p> Это забавный сайт, на котором можно купить голландские продукты. </p> </div> Это код в моем Index.cshtml, которого у меня нет волнистые красные линии или в моем коде …
— Kristijan Vidojkovic
11.10.2018 22:45
Разместите свой код для Index.cshtml, и я смогу помочь. Похоже, что эта часть кода, вероятно, заключена в кавычки, и это не обязательно, но это всего лишь предположения, если вы не показываете код.
— Dave Smash
11.10.2018 22:54
У меня было много пробелов после последнего элемента div O__________O, спасибо за вашу быструю помощь … Новичок на этом сайте, отличное время отклика !!!
— Kristijan Vidojkovic
11.10.2018 23:00
Другие вопросы по теме
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS1009: Unrecognized escape sequence
Source Error:
Line 42:
Line 43: public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Source File: c:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesroot9d389ed92c615f86App_Web_index.cshtml.c114ca27.wbkbq-st.0.cs Line: 44
Кто-то проверяет, что вчера проект работал нормально, а сегодня — нет. он компилируется и собирается без каких-либо проблем, но не работает.
2013-10-29 03:14
4
ответа
В строке 44: у вас 81 обратная косая черта. В строках 45 и 46 у вас есть 80 каждая. При использовании в строковом литерале символ обратной косой черты используется как символ «escape» для обозначения таких вещей, как новые строки и табуляции. Если вы действительно хотите использовать обратную косую черту в вашей строке, вам нужно указать 2 последовательных обратных слеша для каждого желаемого обратного слеша. Так как в строке 44 у вас нечетное количество обратных слешей, вы получаете ошибку.
Если вам действительно нужно такое количество обратных слешей, вы можете отключить escape-символ в C#, поставив перед строковым литералом символ @, например так:
WriteLiteral(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
+ @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
+ @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
Кроме того, вы можете удалить одну из обратных косых черт из строки 44.
2013-10-29 03:40
Просто используйте этот конструктор
new String('\', 80)
чтобы получить строку из 80 обратных слешей.
2013-10-29 04:39
Я получил то же самое, это автоматический код, мой проект ASP.net с MVC 4, Razor. Этот код не введен нами. Только получая эту ошибку при новом развертывании, другие развертывания того же кода работают нормально,
Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.
Compiler Error Message: CS1009: Unrecognized escape sequence
Source Error:
Line 42:
Line 43: public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Source File: c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Filesroote22c255992c7e946App_Web__viewstart.cshtml.cdcab7d2.gtokpxja.0.cs Line: 44
2014-11-26 17:59
Проблема здесь (как упоминалось в ответе Бо Флексона) заключается в автоматически сгенерированном коде, а не в физическом написании представления с (большим) нечетным числом символов косой черты в нем.
Одно из решений, описанных в ответе на этот вопрос, заключается в простой перекомпиляции и повторном развертывании.
Для меня это не сработало, потому что проблема, похоже, была в порядке сборки нашего большого решения. Сначала я наткнулся на решение, сделав несколько небольших изменений в отдельном представлении в проекте, находящемся глубже в иерархии, что заставило его правильно перестроить проект с проблемным представлением. С тех пор мне повезло, когда я перестраивал проекты один за другим, а не полагался на полное перестроение решения, чтобы сделать заказ правильным.
2016-04-15 09:29