Вот простое решение, в котором используется только стандартная библиотека регулярных выражений
#include <regex>
#include <string>
#include <vector>
std::vector<string> Tokenize( const string str, const std::regex regex )
{
using namespace std;
std::vector<string> result;
sregex_token_iterator it( str.begin(), str.end(), regex, -1 );
sregex_token_iterator reg_end;
for ( ; it != reg_end; ++it ) {
if ( !it->str().empty() ) //token could be empty:check
result.emplace_back( it->str() );
}
return result;
}
Аргумент regex позволяет проверять несколько аргументов (пробелы, запятые и т. д.).
Обычно я только check для разделения на пробелы и запятые, поэтому у меня также есть эта функция по умолчанию:
std::vector<string> TokenizeDefault( const string str )
{
using namespace std;
regex re( "[\\s,]+" );
return Tokenize( str, re );
}
"[\\s,]+"
проверяет пробелы (\\s
) и запятые (,
).
Обратите внимание, что если вы хотите разбить wstring
вместо string
,
std::regex
на std::wregex
sregex_token_iterator
to wsregex_token_iterator
Обратите внимание, что вы также можете взять строковый аргумент по ссылке, в зависимости от вашего компилятора.
Сообщение об ошибке вводит в заблуждение. Вы должны иметь MultipleActiveResultSets=True
в строке соединения, чтобы иметь возможность отправлять две отдельные команды с двумя разными считывателями.
Объявить эти DataReader в блоке public partial class Form1 : Form
Пример:
namespace GoodFood_1_
{
public partial class Autentificare_client : Form
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\edi_b\Documents\visual studio 2013\Projects\GoodFood(1)\GoodFood(1)\GOOD_FOOD.mdf;
Integrated Security=True;MultipleActiveResultSets=True");
SqlConnection con2 = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\edi_b\documents\visual studio 2013\Projects\GoodFood(1)\GoodFood(1)\GOOD_FOOD.mdf;
Integrated Security=True;MultipleActiveResultSets=True");
SqlDataReader dr;
SqlDataReader cc;
public Autentificare_client()
{
InitializeComponent();
}
Это возможно, когда вы используете что-то, называемое множественными наборами активных результатов, или MARS. Проверьте эту полезную статью , которая описывает все возможные ловушки.
В вашем соединении вам нужно включить несколько активных наборов записей (MARS).
http://msdn.microsoft.com/en-us/library/h32h3abf%28v=vs 0,80% 29.aspx
1. Просто добавьте MultipleActiveResultSets = True в строку подключения:
private string _ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=yourdbpath\Database.mdf;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30";