• XAML C# Как работать с БД?

    Tsiren Naimanov: Compact можно и на ПК использовать.
  • XAML C# Как работать с БД?

    Tsiren Naimanov: https://msdn.microsoft.com/ru-ru/library/windows/a...(v=vs.105).aspx

    Для Windows Phone использовать SQLite или SQL Compact.
  • XAML C# Как работать с БД?

    Суть проблемы непонятна. Ссылка на сборку System.Data есть?

    2za

    По идее, по умолчанию должна быть и все должно работать.

    Если ссылка на сборку есть, но при попытке использовать классы SqlConnection, SqlCommand и т.п. возникают ошибки, то нужен код, и текст сообщений об ошибках.
  • Почему VS не дает управлять SQL сервером?

    Да, скорее всего :-) Отдельный компоненты Visual Studio лучше не удалять.
  • Сортировка элементов строки?

    Tsiren Naimanov: лучше задать отдельный вопрос, чтобы все видели и отвечать было удобней. Ну и чтобы было в тему, а то здесь ведь вопрос про сортировку, а не работу с данными.
  • Почему VS не дает управлять SQL сервером?

    Дмитрий Гавриленко:
    Но через нее я не хочу управлять БД

    Придется :-)
  • Почему VS не дает управлять SQL сервером?

    Попробуйте использовать SQL Server Management Studio.

    2008 Express
    2012 Express
    2014 Express
    Express версии, особенно последние, простые как валенки. При установке только Далее успевай нажимать :-)
  • Сортировка элементов строки?

    Tsiren Naimanov: да, получить массив (ToCharArray()) и выполнить сортировку, потом обратно склеить.
    var result = new string(массив символов);
    Если нужно и слова и символы в словах, то красивее всего будет с LINQ:
    var value = "a ack fghjy fghfh asn 98501 xbancd23das";
    string result = String.Join
    (
      " ", 
      value.Split().Select
      (
        w => new string(w.OrderBy(ch => ch).ToArray())
      ).OrderBy(w => w)
    );
    Console.WriteLine(result);

    Посмотреть, как это работает.
    LINQ должен быть чуть медленней, чем обычные циклы и Array.Sort.
  • Как Достать часть из строки в c#?

    lam0x86: да, была такая мысль, но лень :-)
  • Нарушение порядка запросов страницы, баг браузера или сервера?

    Несколько раз прочитал, не понял о чем идет речь :-)

    Показанный код, у меня во всех браузерах, работает правильно. При каждом обновлении страницы, значение в Session увеличивается на единицу.

    Может проблема в Page.IsPostBack? Вы это учитываете, когда пользователь заполняет и отправляет форму? По идее, if (Page.IsPostBack) { то новый код для капчи не нужно генерировать }.
  • Как Достать часть из строки в c#?

    Если кому-то интересно, то вот:
    using System;
    using System.Diagnostics;
    using System.Text.RegularExpressions;
    
    public class Program
    {
    
    	private static Stopwatch w = new Stopwatch();
    	private static string data = "0x00 00 00 00 00 00 00 00 00 00 3A 00 F1 10 30 00 ..............09";
    	
    	public static void Main()
    	{
    		SubstringAndTrim1();
    		SubstringAndTrim2();
    		SubstringAndTrim3();
    		RegExp1();
    		RegExp2();
    	}
    	
    	private static void SubstringAndTrim1()
    	{
    		w.Restart();
    		string result = data.Substring(0, data.IndexOf(".")).TrimStart("0x ".ToCharArray());
    		w.Stop();
    		Console.WriteLine("Substring + Trim #1:\t {0}", w.Elapsed);
    		Console.WriteLine(result);
    		Console.WriteLine();
    	}
    	
    	private static void SubstringAndTrim2()
    	{
    		w.Restart();
    		string result = data.Substring(2).TrimStart("0 ".ToCharArray()).TrimEnd("0123456789.".ToCharArray()).Trim();;
    		w.Stop();
    		Console.WriteLine("Substring + Trim #2:\t {0}", w.Elapsed);
    		Console.WriteLine(result);
    		Console.WriteLine();
    	}
    		
    	private static void SubstringAndTrim3()
    	{
    		w.Restart();
    		string result = data.Substring(2, data.IndexOf(".") - 2).TrimStart("0 ".ToCharArray());
    		w.Stop();
    		Console.WriteLine("Substring + Trim #3:\t {0}", w.Elapsed);
    		Console.WriteLine(result);
    		Console.WriteLine();
    	}
    	
    	private static void RegExp1()
    	{
    		w.Restart();
    		var reg = new Regex(@"0x(00 )+(.+) \.");
    		var match = reg.Match(data);
    		string result = match.Groups[2].Value;
    		w.Stop();
    		Console.WriteLine("RegExp #1:\t\t\t {0}", w.Elapsed);
    		Console.WriteLine(result);
    		Console.WriteLine();
    	}
    
    	
    	private static void RegExp2()
    	{
    		w.Restart();
    		var reg = new Regex(@"0[x][0]+([1-90a-fA-F]+)");
    		string result = "";
    		foreach (Match m in reg.Matches(data.Replace(" ", String.Empty)))
    		{
    		  if (m.Success)
    		  {
    			result += m.Groups[1].Value;
    		  }
    		}
    		w.Stop();
    		Console.WriteLine("RegExp #2:\t\t\t {0}", w.Elapsed);
    		Console.WriteLine(result);
    		Console.WriteLine();
    	}
    	
    }

    Как и следовало ожидать, разница несущественная :-)
    Substring + Trim #1:     00:00:00.0000107
    3A 00 F1 10 30 00 
    
    Substring + Trim #2:     00:00:00.0000072
    3A 00 F1 10 30 00
    
    Substring + Trim #3:     00:00:00.0000058
    3A 00 F1 10 30 00 
    
    RegExp #1:             00:00:00.0013962
    3A 00 F1 10 30 00
    
    RegExp #2:             00:00:00.0005510
    3A00F1103000

    Хотя тест не совсем правильный, нужно немного по-другому проверять, а то в данном случае изменение порядка влияет на результат. Но очевидно, что регулярные выражения чуть-чуть проигрывают :-)
  • Как правильно работать с большой базой через C# + MsSQLL?

    tarasverq:
    А как быть, если у меня помимо основной таблицы есть еще дочерние, в которые записываются данные, которых может быть больше чем один экземпляр, которые принадлежат к одной записи из основной таблицы. Тут никак без циклов, если XML генерируем.

    Циклы нужны только на стороне C#. В хранимой процедуре циклы будут сильно все замедлять.
    Я показал пример кода выше. Это можно использовать и для массового добавления, обновления и удаления данных в любом количестве таблиц, в рамках одной процедуры (запроса).

    Для сохранения связей, проще всего, в качестве ключей использовать GUID. Их можно без проблем генерировать на стороне C#. Можно и числовые идентификаторы использовать, но это будет сложнее.

    Что касается слежения за базой, то для этого нужен доступ к серверу и среда SQL Server Management Studio (можно и удаленно, но права могут быть ограничены). Как минимум стоит посмотреть на размер файлов базы и журналов, если кажутся большими, то следует сделать резервную копию и сжать базу.
  • Как правильно работать с большой базой через C# + MsSQLL?

    tarasverq:
    Возможно, быстрее будет просто сгенерировать огромную строчку с кучей инсертов?


    Нет. Основной тормоз - это журналирование. На каждый INSERT INTO будет создаваться запись в журнале и существенной разницы не будет, выполнять их пачкой или по одному.

    Для вставки, самый быстрый вариант - это SqlBulkCopy. Пока я писал эти строчки, при помощи SqlBulkCopy. можно было много миллионов строк данных в базу добавить :-) Быстрее этого просто ничего нет.

    То бишь, забиваем DataTable идентификаторами, далее генерируем xml из всех данных, которых еще нет в базе, и передаем ее в хранимую процедуру? я правильно все понял?

    Да, но не все данные за раз, а небольшими порциями.
    Размер порции будет зависеть от объемов данных и возможностей сервера. Нужно опытным путем подбирать. Можно начать с 10 000, если будет хорошо, увеличивать до 100 000. Если плохо - уменьшать. По времени выполнения запроса можно прикинуть сколько примерно займет полный цикл обновления.

    За состоянием базы не забывать следить. Чем лучше будет себя чувствовать база, тем быстрее будет работать.

    Если так, то без циклов в процедуре не обойтись.

    Цикл на стороне C#. Одна процедура на стороне SQL Server, которая должна принимать XML и выполнять обновление. Дополнительные циклы в самой процедуре не нужны.
  • Как очистить поле, где я ввел текст (JQuery)?

    Очистить:
    $("input[name=add-task]").val('');

    Но видимо требуется перед очисткой запомнить введенный текст?
    // запоминаем
    var myTask = $('input[name=add-task]').val();
    // очищаем
    $("input[name=add-task]").val('');
    // используем то, что запомнили
    $('.border-info').append
    (
      '<div class="task">' +
      '<input type="checkbox" name="post" class="write-post">' +
      '<span class="vall">' + myTask + 
      '</span></div>'
    );

    или без промежуточной переменной:
    // используем 
    $('.border-info').append
    (
      '<div class="task">' +
      '<input type="checkbox" name="post" class="write-post">' +
      '<span class="vall">' + $('input[name=add-task]').val() + 
      '</span></div>'
    );
    // очищаем
    $('input[name=add-task]').val('');
  • Как получить хранящееся значение в сессии ASP.NET MVC 4?

    Quber: Да, в MVC делать Response.Redirect будет неправильно.

    Нужно использовать специально созданные для этого методы, начинающиеся со слова Redirect*. Их там целый зоопарк.

    При использовании Response.Redirect, сервер не передает Cookies клиенту. Поэтому сессия теряется.

    Почему... Не задумывался об этом. Правильный код использовать удобней :-) Вероятно команда Response.Redirect("~/General/Services") завершает текущий запрос (Response.End()). А работа с Session происходит в контексте MVC и после Response.End(), MVC манипулировать текущим Response уже не может. Т.е. получается, MVC находится выше, чем результат работы Response.Redirect(). Возможно, моё объяснение некорректно, но полагаю, это примерно так работает.

    Вообще, в ASP.NET при работает с HTTP, в большинстве своем, нет нужды соблюдать строгий порядок действий, как в PHP. Все само делается, как нужно.

    ...
    Сейчас проверил, у Response.Redirect есть перегрузка и вторым параметром можно указать, нужно завершать выполнение запроса или нет.

    Вот так код будет работать:
    Session["privet"] = "Привет";
    Response.Redirect("~/General/Services", false);
    return View();

    Но он неправильный :-)
  • Как получить хранящееся значение в сессии ASP.NET MVC 4?

    Значит значение будет храниться в виде строки? Зачем мы еще используем ToString? Мы же не объект храним? Или я не прав?

    Внутри Session это выглядит примерно так:
    object sessionItem = "Привет";
    т.е. любой добавляемый тип является object.

    Если бы каждый элемент сессии имел строгий тип, то работать с ней было бы сложно. Пришлось бы делать для каждого типа отдельные методы:
    Session.AddInt32("ключ", 123);
    Session.AddString("ключ2", "Привет");
    А потом еще методы для получения значений нужного типа.

    С типом object все просто, можно даже пользовательские классы использовать (в session лучше не хранить классы, но это возможно).

    Ключевое слово var используется для неявного объявления типов, т.е. тип переменной определяется компилятором автоматически, в зависимости от значения. Не всегда это можно использовать.

    В случае с Session["User.Project"] = "Привет";, компилятор будет знать, что Привет является строкой (классом System.String) и сможет правильно определить исходный тип. Но присвоить типу string тип object просто так нельзя, нужно явное преобразование. У типа object есть метод GetType(), который позволяет определить текущий тип. От типа object происходят все остальные типы. В общем, сплошное ООП :-)

    Соответственно, если использовать var, то тип будет определен автоматически:
    var test = "Привет";

    а при явном определении типа придется явно преобразовывать object в нужный тип:
    // переменная sessionItem типа object
    // может использоваться для хранения любых типов данных
    object sessionItem = "Привет";
    // переменная test типа string
    // преобразуем sessionItem в строку
    string test = sessionItem.ToString(); 
    
    sessionItem = 123;
    // переменная num типа int 
    // преобразуем sessionItem в int 
    int num = (int)sessionItem;
  • Как получить хранящееся значение в сессии ASP.NET MVC 4?

    А применении точки в названии ключа сессии приводит к возвращению объекта?

    Нет. Имя ключа вообще не играет никакого значение. Это просто строка. Можно любой набор символов использовать.

    Я обычно пишу на php и там нету проблем в названии ключа для сессии, с точкой или нижнем дефисом, поэтому я предположил что здесь тоже нет разницы.

    Верно.

    Или как вы определили, что сессия возвращает объект?

    Сессия может хранить любой тип данных. Это возможно благодаря универсальному типу object.

    В C#, в отличие, например от Visual Basic .NET или PHP, нельзя просто так взять и присвоить один тип к другому, если сам тип этого не предусматривает (в большинстве своем так и есть).

    Я банально создал две страницы. При вызове первой, данные сохраняются в сессии.

    Проект в студию! Как есть, целиком. Если большой или секретный. попробуйте повторите в голом проекте и покажите его.

    Такая строчка: string test = Session["User.Project"]; не позволит компилировать проект. И при проверке, может быть использована последняя успешная версия проекта, где такой строчки кода нет.
    Для получения string, правильно будет:
    string test = Session["User.Project"].ToString();
  • Как получить хранящееся значение в сессии ASP.NET MVC 4?

    Quber: по снимку, все нормально, так и должно быть. В контроллере доступ без Current, или вообще можно опустить HttpContext.

    По вопросу, почему null - может напутали чего. Например, на снимке имя параметра сессии User_Project, а в тексте вопроса: User.Project. И тип данных разный.

    Если нет, то поведение Session вы намерено не настраивали? Cookies у клиента нормально работают? Ну и глупый вопрос, вы уверены, что между переходом от метода, в котором создается сессия, к следующему методу проект не перекомпилируется? :-)

    Еще один вопрос, если сессия возвращает тип object, то почему вы пишите string test = Session["User.Project"]; Действительно такой код используете, или это просто ошибка в тексте вопроса?