Sergey
- Вопросы
- Ответы
Имя | Sergey |
Возраст | Неизвестно |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1110 дн., 23 час., 43 мин. |
Последняя активность | 513 дн., 22 час., 2 мин. назад |
Ответы
Перейти к вопросу →
Можно использовать в меппинге конструкцию:
<join table="second_table">
<key column="ref_first_table_id"/>
<property name="PropertyName" column="second_id" update="false"/>
</join>
Параметр update="false"
используется для того, чтобы при изменениях сущности таблица меппинга не апдейтилась.
Перейти к вопросу →
Назначить событию onclick
ячейки:
function cancelClick(event) {
event = event || window.event; // cross browser
event.cancelBubble = true; // Internet Explorer:
if (event.stopPropagation) {
event.stopPropagation() // W3C:
}
}
Перейти к вопросу →
1 В настройках web.config добавить
<authentication mode="Windows"/>
<identity impersonate="true" />
2 В настройках IIS: "встроенная проверка Windows" анонимный доступ отключён.
3 Смена прав для Application Pool на Local System дала возможность использовать Active Directory.
4 Internet Explorer автоматически использует NTML аутентификацию только для сайтов из зон Trusted Sites и Local Intranet. Скорее всего компьютер на котором запущеен IIS не воспринимается как входящий в одну из этих зон (посмотри что пишется справа в строке статуса). Тебе должно помочь ручное добавление сайта в Local Intranet.
Перейти к вопросу →
Вот тут неплохая статья для старта с log4net: Использование log4net, Ежедневные логи на log4net
Перейти к вопросу →
Нужно применить стиль
textarea
{
resize: none;
}
Cвойство resize относиться к CSS3, к счастью Safari и Chrome поддерживают его, но возникнут проблемы с валидации на CSS2.1
Перейти к вопросу →
Уже забыл php) Но думаю, если ничего нового не изобрели, то как-то так:
if (isset($_POST) and $_SERVER["REQUEST_METHOD"]=="POST"){
}
Перейти к вопросу →
Пример переноса базы детачем на 2005-м и аттачем на 2008-м.
--На 2005-м:
use tempdb
alter database AdventureWorks_2005 set read_only with rollback immediate
exec sp_detach_db @dbname = 'AdventureWorks_2005'
--Копируем файлы БД, иначе при аттаче их займет 2008-й и 2005-й не сможет их зацепить обратно.
--2008-й, кстати, их проапгрейдит автоматом, так что 2005-й обратно уже не примет.
exec sp_configure 'show advanced options', 1
reconfigure with override
exec sp_configure 'xp_cmdshell', 1
reconfigure with override
exec xp_cmdshell 'copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Data.mdf" "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA"'
exec xp_cmdshell 'copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Log.ldf" "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA"'
--На 2008-м:
use tempdb
if exists (select 1 from sys.databases where name = 'AdventureWorks_2005') begin
alter database AdventureWorks_2005 set single_user with rollback immediate
drop database AdventureWorks_2005
end
create database AdventureWorks_2005 on primary
(filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks2005_Data.mdf')
log on
(filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks2005_Log.ldf')
for attach
--Или
exec sp_attach_db @dbname = 'AdventureWorks_2005',
@filename1 = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Data.mdf',
@filename2 = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Log.ldf'
--что является обсолитной конструкцией.
Пример переноса базы восстановлением на 2008-м резервной копии, сделанной на 2005-м.
--На 2005-м:
use tempdb
alter database AdventureWorks_2005 set read_only with rollback immediate
backup database AdventureWorks_2005 to disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak'
with init, stats = 10, name = 'Полный бэкап', description = 'Для апгрейда на 2008'
--На 2008-м:
use tempdb
--Проверяем на фсякей содержание бэкапа
restore headeronly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak'
restore filelistonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak' with file = 1
--И восстанавливаемся из него
restore database AdventureWorks_2005 from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak'
with
move 'AdventureWorks_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks_2005.mdf',
move 'AdventureWorks_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks_2005.ldf',
recovery, stats = 10, replace
alter database AdventureWorks_2005 set read_write
use AdventureWorks_2005
--Перестройка индексов, апдейт статистики и перевод базы в режим поддержки новой версии
exec sp_MSforeachtable @command1 = "print '?'", @command2 = 'alter index all on ? rebuild with (online = on)'
exec sp_updatestats
alter database AdventureWorks_2005 set compatibility_level = 100
Перейти к вопросу →
Он и не установится из соображений безопасности. Один из вариантов решения данной проблемы:
UserPassword.Attributes.Add("value", "Password");
Второй вариант - сделать свой контрол на базе TextBox. Приблизительно таким образом:
public class TestBox : TextBox
{
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
if (this.TextMode == TextBoxMode.Password)
{
writer.AddAttribute("value",this.Text);
}
}
}
Ну можно и javascript ом установить значение.
Перейти к вопросу →
Советую для удачного старта почитать блог Стива Ласкера, например про Privately Deploying SQL Server Compact with the ADO.NET Entity Provider
Перейти к вопросу →
И все же мне удалось решить проблему
Сначала код:
BinaryReader instr = new BinaryReader(File.OpenRead(path));
byte[] data = instr.ReadBytes((int)instr.BaseStream.Length);
instr.Close();
// определяем BOM (EF BB BF)
if (data.Length > 2 && data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf) {
if (data.Length != 3) return Encoding.UTF8.GetString(data, 3, data.Length - 3);
else return "";
}
int i = 0;
while (i < data.Length - 1) {
if (data[i] > 0x7f) { // не ANSI-символ
if ((data[i] >> 5) == 6) {
if ((i > data.Length - 2) || ((data[i + 1] >> 6) != 2))
return Encoding.GetEncoding(1251).GetString(data);
i++;
} else if ((data[i] >> 4) == 14) {
if ((i > data.Length - 3) || ((data[i + 1] >> 6) != 2) || ((data[i + 2] >> 6) != 2))
return Encoding.GetEncoding(1251).GetString(data);
i += 2;
} else if ((data[i] >> 3) == 30) {
if ((i > data.Length - 4) || ((data[i + 1] >> 6) != 2) || ((data[i + 2] >> 6) != 2) || ((data[i + 3] >> 6) != 2))
return Encoding.GetEncoding(1251).GetString(data);
i += 3;
} else {
return Encoding.GetEncoding(1251).GetString(data);
}
}
i++;
}
return Encoding.UTF8.GetString(data);
Теперь немного поясню: Сиволы в UTF-8 кодируются последовательностями длиной от 1 до 4 байт (октетов).
Вот в таком формате:
U+000000-U+00007F: 0xxxxxxx (ANSI)
U+000080-U+0007FF: 110xxxxx 10xxxxxx (сюда входит кириллица)
U+000800-U+00FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U+010000-U+10FFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
По маске первого октета определяется общее число октет в последовательности, а затем они проверяются на соответствие маске 10xxxxxx. Если какой-то байт не соответсвует маске, значит кодировка отличная от UTF-8 (в моем случае win1251).
Код, конечно, громоздкий, но для демонтрации самого алгоритма вполне достаточный