Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Открыть новую тему     Написать ответ в эту тему

Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Раз DataSet создвал мастером, значит студия тебе сделала специальный класс и потому к полям можешь обращаться через ((класс объекта mdDS.OPERACIIRow)mdDS.OPERACII.Rows[0]).IS_DELETED = 1; (могу ошибиться в названиях полей)
 
Метод Fill нужен для того, чтобы при помощи TableAdapter'а заполнить DataSet или DataTable. По умолчанию он просто копирует таблицу источника данных. Кроме этого, можно добавлять свои методы получения данных при помощи написания SQL-запроса. Также, у TableAdapter'a есть свойства: SelectCommand, InsertCommand, UpdateCommand, и DeleteCommand. Там зранятся запросы, которые реально будут вызваны для соответствующего действия (выборки, вставки, обновления и т. д.). Запросы SQL-ные. Переписывать очень рекомендую, так как студия генерит их очень плохо.
 
 
Добавлено:
Concurency violation возникает, когда пытаетесь редактировать уже измененную запись, но не сохраненную. Например в базе запись: [Name="John", Age=45]. Fill'ом кидаете эту информацию в DataSet. Меняете ее в DataSet'е на [Name="John", Age=54]. В то же самое время, кто-то в базе меняет эту же запись на [Name="John", Age=90]. При попытке обновления базы из DataSet'а ни фига не обновиться, потому как DataSet помнит, что читал запись, где Age был равен 45. Вывод: переписать UpdateCommmand так, чтобы он искал запись НЕ ПО ВСЕМ ПОЛЯМ, как он делает по умолчанию, а только, например, по первичному ключу.
В общем случае пробуйте помещать обновление таблицы в try-блок, ловить DBConcurrencyException и в его свойствах смотреть, чего ему не хватает

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 11:23 31-07-2009
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Люди помогите решить 2 маленьких проблемы.
1) У меня есть функция которая ищет в тексте, заданный текст и выделяет в цвете. Функция работает нормально но когда я ввожу новое значение, прежнее выделение остается. Функция Deselect() не помогает. Чем можно это исправить?
2) У меня есть другая функция которая конвертирует текст в шестнадцатиричное число, и наоборот. Так вот, конвертировать текст в число это не проблема (даже юникод), а вот обратно из шестьнадцаричного числа в юникод это проблема. Прога выдает обычние ASCII символы. Как исправить это?
Вот код функции:

Код:
 
private void btnth_Click(object sender, EventArgs e)
        {
            string hex1 = "", hex2 = "";
            switch (hexflag)
            {
                case 0: //Convert chars to hex
                    foreach (char c1 in rtb1.Text)
                    {
                        int tmp = c1;
                        hex1 += string.Format("{0:x4}", (uint)System.Convert.ToInt32(tmp.ToString())) + " ";
                    }
                    foreach (char c2 in rtb2.Text)
                    {
                        int tmp = c2;
                        hex2 += string.Format("{0:x4}", (uint)System.Convert.ToInt32(tmp.ToString())) + " ";
                    }
                    rtb1.Text = hex1.ToUpper();
                    rtb2.Text = hex2.ToUpper();
                    hexflag = 1;
                    break;
                case 1:
                    /*Convert hex to chars*/
                    string temp = rtb1.Text, temp2 = rtb2.Text;
                    for (int i = 0; i < rtb1.TextLength; i += 5)
                    {
                        hex1 += System.Convert.ToChar(System.Convert.ToInt32(temp.Substring(i + 2, 2), 16)).ToString();
                    }
                    for (int j = 0; j < rtb2.TextLength; j += 5)
                    {
                        hex2 += System.Convert.ToChar(System.Convert.ToInt32(temp2.Substring(j + 2, 2), 16)).ToString();
                    }
                    rtb1.Text = hex1;
                    rtb2.Text = hex2;
                    hexflag = 0;
                    break;
                default:
                    MessageBox.Show("Error");
                    break;
            }
        }
 


----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 01:02 01-08-2009
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
По первому вопросу сходу не скажу, смотреть надо. А по второму - запросто. Ты когда во входной строке почему-то вместо 4 цифр числа берешь только последние 2. Например, кириллическая 'М' имеет hex код 041c. Твоя прога при преобразовании возьмет только 1с, преобразует в код 28, а это символ разделителя файлов, то есть символ непечатный. Правильно так:

Код:
 hex1 += System.Convert.ToChar(System.Convert.ToInt32(temp.Substring(i, 4), 16)).ToString();

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 08:51 01-08-2009
Lihonosov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro

Цитата:
1) У меня есть функция которая ищет в тексте, заданный текст и выделяет в цвете. Функция работает нормально но когда я ввожу новое значение, прежнее выделение остается. Функция Deselect() не помогает. Чем можно это исправить?

Код функции Deselect() покажите.

Всего записей: 537 | Зарегистр. 05-07-2007 | Отправлено: 12:29 01-08-2009
gsseriy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите знающие люди.
Мне необходимо чтобы моя программа  эмулируя мышку нажимала  кнопку в другом приложении.
Ниже приведен код функции, он работает нормально. Но стороннее приложение время от времени при эмуляции нажатия проверяет состояние кнопки мыши. Как установить кнопку мыши в состояние нажато?
 
 public static void SetMessage(int xx, int yy,IntPtr ww)
        {
             
            mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown, xx, yy, 0, ww);
            int  xrnd = gen.Next(5);
            Thread.Sleep(50 + xrnd);
            mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, xx, yy, 0, ww);
        }

Всего записей: 11 | Зарегистр. 10-07-2006 | Отправлено: 12:42 01-08-2009 | Исправлено: gsseriy, 20:30 01-08-2009
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Lihonosov

Цитата:
Код функции Deselect() покажите.

richTextBox1.Deselectall();
Вот и вся функция....
Omicron_Persey_8
Благодарю за помощь
 

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 12:45 01-08-2009
Lihonosov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro

Цитата:
richTextBox1.Deselectall();  
Вот и вся функция....

TextBoxBase..::.DeselectAll - метод:
Указывает, что значение свойства SelectionLength равно нулю, так что в элементе управления нет выбранных знаков.
Т.е. можно, например так:
 

Код:
private void DeselectButton_Click(object sender, EventArgs e)
{
      richTextBox1.SelectAll();
      richTextBox1.SelectionBackColor = Color.White;
      richTextBox1.DeselectAll();
}


Всего записей: 537 | Зарегистр. 05-07-2007 | Отправлено: 00:22 02-08-2009
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Omicron_Persey_8
MagistrAnatol
Omicron_Persey_8 прав - лучший вариант использовать команды sqladapter - insertCommand, updateCommand, deleteCommand и Fill (SelectCommand) - имхо при изменении стуктуры бд - достачно будет поменять sqladapter: в случае MagistrAnatol неоходимо будет менять и код программы. Можно еще вместо комманд использовать хранимые процедуры - при изменении бд во многих случаях требуется только изменение этих хранимых процедур.

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 09:13 03-08-2009
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос знатокам:  
SQL Server 2005, нетипизированный DataSet. Через SqlDataAdapter (CommandBuilder) сбрасываю изменения в базу, и обнаружил странную вещь -- часто изменения записываются после второго нажатия на кнопку (вызова метода, который и записывает). Почему так происходит?

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 12:05 03-08-2009
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackVetal
Если изменяется структура БД, то код по-любому надо будет менять. 100%, что где-нибудь в коде к полю по имени обращаешься. Я все-таки предпочитаю типизированный DataSet, обновить его можно за пару минут, к тому же все обращения к несуществующим полям отлавливаются на этапе компиляции. И если поковыряться в классе, который сгенерит студия для типизированного DataSet'а, то прога прибавит в производительности.
 
 
Добавлено:
TeXpert
А как вы это определили? Вполне вероятно, что клиентская прога не успела обновленные данные перечитать (как и SQL Server Management Studio). Да и обновление процесс не мгновенный.

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 13:14 03-08-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вроде с присвоением разобрался,но есть другая проблемка - я реализую
мастер-детал конструкцию(связка через форегин кей) - все создавал мастером - база скл компакт.
записи бодавляются все путем
                    oper_fkBindingSource.AddNew();
                    Zemlya.frmDetal operacii_detalEditViewDialog = Zemlya.frmDetal.Instance(this.oper_fkBindingSource);
                    operacii_detalEditViewDialog.ShowDialog();
                    this.oPERACII_DETALTableAdapter.Update(this.mdDS.OPERACII_DETAL);
                    this.oPERACII_DETALTableAdapter.FillBy(this.mdDS.OPERACII_DETAL);
 
но при попытке обновыть детал таблицу получаю ошибку
return this.Adapter.Update(dataTable);
[ OPERACII_DETAL,PK_OPERACII_DETAL_78EYBARRFNU8Z43KTBL8 ]

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 18:10 03-08-2009
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Ну когда вы научитесь тексты ошибок писать? Дежурного телепата сегодня нет.  

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 22:11 03-08-2009 | Исправлено: Omicron_Persey_8, 22:12 03-08-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Omicron_Persey_8
ошибки такие ругается на  
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public virtual int Update(mdDS.OPERACII_DETALDataTable dataTable) {
            return this.Adapter.Update(dataTable);
        }
 
SqlCeException не обработано
[ OPERACII_DETAL,PK_OPERACII_DETAL_78EYBARRFNU8Z43KTBL8 ]
+        $exception    {" [ OPERACII_DETAL,PK_OPERACII_DETAL_78EYBARRFNU8Z43KTBL8 ]"}    System.Exception {System.Data.SqlServerCe.SqlCeException}
+        this    {Zemlya.mdDSTableAdapters.OPERACII_DETALTableAdapter}    Zemlya.mdDSTableAdapters.OPERACII_DETALTableAdapter
+        dataTable    {OPERACII_DETAL}    Zemlya.mdDS.OPERACII_DETALDataTable
стек вызовов
>    Zemlya.exe!Zemlya.mdDSTableAdapters.OPERACII_DETALTableAdapter.Update(Zemlya.mdDS.OPERACII_DETALDataTable dataTable = {OPERACII_DETAL}) Строка 2720 + 0x7 байт    C#
     Zemlya.exe!Zemlya.frmMain.toolBar1_ButtonClick(object sender = {System.Windows.Forms.ToolBar}, System.Windows.Forms.ToolBarButtonClickEventArgs e = {System.Windows.Forms.ToolBarButtonClickEventArgs}) Строка 113 + 0x11 байт    C#

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 09:59 04-08-2009
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Omicron_Persey_8

Цитата:
Если изменяется структура БД, то код по-любому надо будет менять. 100%,

несовсем точно выразился я - смотря какие изменения: при добавлении/удалении/изменении типа - да код программы меняется. При изменении расположения поля (например перемещение в другую таблицу) или таблица поменяла базу - достаточно изменить хранимую процедуру.
TeXpert
а примерный код можно?

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 10:09 04-08-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Omicron_Persey_8
если я правильно понял он ругается почемуто на первичный ключ, токо по ошибках не могу разобраться какого черта ему не хватает,что именно нарушено в ключе - уникальность,вроде нет ???
 
Добавлено:
вроде разобрался в чем проблема - ругается на индексы - но базу составлял вроде как в примере и не могу понять че не так с индексами

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 12:55 04-08-2009
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Да, проблемы с ключами. проверяй в отладчике: уникальность, для Detail таблицы наличие соответствующего PK в master таблице, и свойства DataRelation между ними.

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 15:10 04-08-2009
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Omicron_Persey_8
Цитата:
А как вы это определили?
Через Management Studio, причём насильно обновляя тамошнее окно
Цитата:
Вполне вероятно, что клиентская прога не успела обновленные данные перечитать (как и SQL Server Management Studio)
Исключено -- база локальная и только одна программа работает с ней
 
BlackVetal
Цитата:
а примерный код можно?
Чуть позже, обязательно

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 21:19 04-08-2009
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот примерный код:
Код:
 
public static void DoSmthWithTable(string strSourceName) {
/*             Hash-таблица myBindingSources содержит ссылки на BindingSource,   ассоциированной с именем соответствующей таблицы */
                BindingSource bs = (BindingSource)myBindingSources[strSourceName];
/*             Создаем запись и заполняем её поля. Объект BV типа BaseForm.BaseVariables (класс) содержит в качестве свойств поля нашей записи */
                DataRow row = ((DataRowView)bs.AddNew()).Row;
                foreach (DataColumn col in row.Table.Columns) {
                    if (typeof(BaseForm.BaseVariables).GetProperty(col.ColumnName) != null) {
                        if (col.DataType == System.Type.GetType("System.DateTime")) {
                            row[col.ColumnName] = DateTime.Today;
                        }
                        else {
                            row[col.ColumnName] = typeof(BaseForm.BaseVariables).GetProperty(col.ColumnName).GetValue(BV, null);
                        }
                    }
                }
/*             Hash-таблица mySqlDataAdapters содержит ссылки на SqlDataAdapter,   ассоциированной с именем соответствующей таблицы */
                SqlDataAdapter da = (SqlDataAdapter)mySqlDataAdapters[strSourceName];
                da.SelectCommand.Connection.ConnectionString = CONNECTION_STRING;
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                cb.GetInsertCommand(true);
                try {
                    if (da.Update(myDataSet.Tables[strSourceName]) > 0) {
                    }
                }
                catch (Exception ex) {
                    MessageBox.Show(ex.Message, "Произошла ошибка");
                }
}
Строка соединения:
Код:
protected static string CONNECTION_STRING = @"Data Source=.\SQLSERVER2005;Initial Catalog=myDataBase;Integrated Security=True";


----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 04:24 05-08-2009 | Исправлено: TeXpert, 04:26 05-08-2009
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TeXpert
Пока у меня одно предположение - не открыто "Connection". После присвоения "ConnectionString" - я бы поставил команду "Open".

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 07:39 05-08-2009
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
А в SQL-ном профайлере запросы на обновление идут после первой попытки, не пробовали смотреть?

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 08:35 05-08-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru