Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры



Выпуск # 315


http://www.kbyte.ru/

 

Новый выпуск!

Дело было вечером, делать было нечего, и решил я выпустить рассылку с последними обновлениями сайта, строго не судите, но если есть что сказать, пишите, не молчите, буду рад ответить.

 

Содержание выпуска

Новости Kbyte.Ru

    Завершена акция «Залей код, получи USB-флэшку!»

Система ЭКСПЕРТ

    Вопрос #000952: Обработка файлов в C# (.NET 2.0)

    Вопрос #000947: Секундомер

    Вопрос #000937: DLOOKUP??

    Вопрос #000935: VB работа с веб-камерой

    Вопрос #000929: MsgBox с двумя кнопками

Последнее на форумах

    Что действует на Вас деградирующе

    Простой Excel

    Сохранение текста в текстовы файл

    Вернуть объект из базы

    Подключится к Access

Последние статьи

    Нестандартная форма

    Как узнать размер базы данных MySQL через php

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

Интересные коды и решения

Юмор на Kbyte.Ru

 

Новости Kbyte.Ru

 

23 мая 2008 / Завершена акция «Залей код, получи USB-флэшку!»

Завершена акция «Залей код, получи USB-флэшку!», которая проходила на нашем сайте в период с 23 апреля по 23 мая 2008 года. По итогам акции определены три победителя:

1-ое место: Никитос – разместил 61 код
2-ое место: Евгений – разместил 58 кодов
3-ье место: Stuart – разместил 7 кодов

Администрация сайта поздравляет победителей и всех участников акции.
Победители получат в подарок USB-флэшки объемом 4, 2 и 1 гигабайт!

 

Все новости Kbyte.Ru

Наверх

 

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, просто спросите и получите ответ ;-)


Вопрос #000952: Обработка файлов в C# (.NET 2.0)

Автор вопроса: Сергей // 09.05.2008 / 18:07

Доброе время суток!
В общих словах, такая задача поставлена передо мной: На веб-странице
пользователь выбирает файл, нажимает кнопку "Импорт" и из этого файла
данные импортируются в таблицу БД Oracle.
Файл должен быть текстовым, первые 2 строки- информация о времени и
логине того, кто выгружал. После них идут строки данных, поля
разделяются симоволом | .
Просьба дать ссылки на документацию по работе с файлами, которые могут
помочь :-)

Отвечает: Алексей Немиро // 12.05.2008 / 10:34

Здравствуйте, Сергей.

Необходимые классы и функции для работы с файлами лежак в пространстве имен System.IO. Также Вам могут понадобиться классы для работы с регулярными выражениями, которые лежат в пространстве имен System.Text.RegularExpressions.
Что касается импорта файлов, то данные можно взять прямо из потока FileUpload.PostedFile.InputStream, передать их в StreamReader и обработать при помощи регулярных выражений.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000947: Секундомер

Автор вопроса: Александр // 08.05.2008 / 17:40

Добрый день!
Как сделать секундомер на сайте kbyte.ru много но вот все они выдают результат как 345сек, а мне надо 1:45:01 то есть в временом формате. Как сделать???

.....

Отвечает: Алексей Немиро // 09.05.2008 / 08:29

Здравствуйте, Александр.

Зная, что в минуте 60 секунд, в часе 60 минут, а в сутках 24 часа, можно легко превратить 345 секунд в нужный формат.
001:
002:
003:
004:
005:
006:
007:
008:
009:
Dim sec As Integer
sec = 345
Dim ssec As Integer, min As Integer, hour As Integer
If sec > 59 Then
 min = Int(sec / 60)
 ssec = sec Mod 60
End If
If min > 59 Then hour = Int(min / 60)
MsgBox sec & " сек. = " & hour & " ч. " & min & " мин. " & ssec & " сек."



--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000937: DLOOKUP??

Автор вопроса: Алексей // 05.05.2008 / 16:37

Почему те поля формы, которые имеют в ControlSource функцию Dlookup не записывают значение полей в конечную таблицу?

--------------------------------------
Категория: --- MS Access

Отвечает: Алексей Немиро // 06.05.2008 / 05:24

Здравствуйте, Алексей.

Из справки MS Access: Функция Dlookup
При использовании этой функции не учитываются
несохраненные изменения записей подмножества. Если функция
DLookup должна использовать измененные значения, необходимо сначала сохранить
изменения с помощью команды Сохранить запись в меню
Записи, с помощью перемещения фокуса на другую запись или
метода Update.


--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000935: VB работа с веб-камерой

Автор вопроса: Анна // 05.05.2008 / 02:35

Язык: Visual Basic 2008 Express Edition.
Подскажите, пожалуйста, как из приложения (Windows Form Application) получить доступ к вебкамере, а именно получить снимок в виде bitmap (отобразить его на форме или же сохранить как bmp-файл).
Заранее очень благодарна!
P.S. Просматривая архив вопросов я уже нашла некоторые решения возникавших у меня проблем - Спасибо огромное!

.....

Отвечает: Алексей Немиро // 05.05.2008 / 09:33

Здравствуйте, Анна.

Попробуйте воспользоваться этим классом

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000929: MsgBox с двумя кнопками

Автор вопроса: Алекс // 01.05.2008 / 23:53

Есть поле со списком на форме, необходимо при выборе определенной позиции из списка вывести MsgBox и две кнопки на нем, при нажатии на которую, в другой TextBox всавлялся бы выбранный вариант ответа
Подскажите, как можно это сделать или в каком направлении копать??

--------------------------------------
Категория: --- MS Access

Отвечает: Алексей Немиро // 02.05.2008 / 04:09

Здравствуйте, Алекс.

001:
002:
003:
If MsgBox("Вставить?", vbQuestion Or vbYesNo) = vbYes Then
 '...
End If


--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

Что действует на Вас деградирующе | Автор: Arti
Добавлено: 25.05.2008 / 20:01 | ответов: 0 | просмотров: 8

На меня следующее, с учетом того что алкаголь и табак не употребляю:
1. Музыка.
2. Новости, в частности канал "Вести"
3. Юмористические передачи (в общем телевизор в целом, дальше продолжать не буду).
4. Молоко. (сам не знаю почему, может и бред, но после него включается мозговой тормоз и хочется спать) :(
5. Женщины. (пудрят мозги прибегая к разным сложным алгоритмам бесструктурного управления)
:(

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Простой Excel | Автор: DemonX
Добавлено: 25.05.2008 / 14:57 | ответов: 0 | просмотров: 17

Хочу написать прогу простеньки Microsoft Excel. Просто создать таблицу забитьеё и сохранить. Проблема в том,что я немогу создать таблицу графически.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Сохранение текста в текстовы файл | Автор: DemonX
Добавлено: 25.05.2008 / 12:04 | ответов: 3 | просмотров: 64

У меня проблема пишу прогу, нужно штобы она информацию из TextBox'а сохраняля в тектсовый файл.
Если можно, то подробно опишите эту процедуру.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Neco
Добавлено:25.05.2008 / 12:18
всё зависит от множества факторов - простейший путь:
001:
002:
003:
System.IO.File.WriteAllText("file", "content");

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: DemonX
Добавлено:25.05.2008 / 12:57
Например?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Neco
Добавлено:25.05.2008 / 13:44
пардон - оказывается вопрос в разделе vb6
там что-то вроде
001:
002:
003:
004:
005:
006:
007:
Dim nfile As Integer
nfile= freefile
open "c:\1.txt" For output As #nfile
Print #nfile,textbox1.Text;
close #nfile

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Вернуть объект из базы | Автор: Arti
Добавлено: 25.05.2008 / 06:04 | ответов: 9 | просмотров: 152

Здравствуйте, есть класс для проверки пользователя в базе данных. Он ищет наличие совпадение по логину и паролю если находит то возвращает True, вопрос заключается в том что можноли как-то возвратить из функции (базы) объект "Пользователь" со всеми его атрибутами, т.е наверно в самой функции нужно объявить объект "Пользователь", а потом каждому его свойству задать соответствующие значения из найденной строки и вернуть. Как это можно сделать через OleDBReader или DataReader или ещё чем, вобщем запутался окончательно что для чего и как этим правильно пользоваться :(

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Arti
Добавлено:25.05.2008 / 08:54
Посмотрите что имеетя сейчас, в комментариях все написано
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
Public Function PoluchitUsera(ByVal UserName As String, ByVal UserPassword As String) As User
    Dim User As New User
    ' Подключаемся к базе
    Dim OleConnection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Users.accdb")
    OleConnection.Open()
    Try
      ' Делаем командоса
      Dim OleCommand As New OleDbCommand
      ' показываем какое подключение надо использовать
      OleCommand.Connection = OleConnection
      ' задаем строку с инструкциями
      OleCommand.CommandText = "SELECT User_ID FROM UsersList " & "WHERE UserName='" & UserName & "' AND UserPass='" & UserPassword & "'"
      ' присваиваем объекту "Пользователь" UID
      User.UID = OleCommand.ExecuteScalar
      ' А вот дальше как делать? Так же неправильно наверно 
      'OleCommand.CommandText = "SELECT UserName FROM UsersList " & "WHERE UserName='" & UserName & "' AND UserPass='" & UserPassword & "'"
      'User.FirstName = OleCommand.ExecuteScalar()
      ' и т д. для каждого свойства объекта User делать новый запрос
    Catch oEx As Exception
      _ConnectionStatus = oEx.Message
    End Try
    ' проверяем прошел ли пользователь проверку
    If User.UID = Nothing Then
      Return Nothing
    Else
      Return User
    End If
  End Function

Colorized by: Eros.CodeSyntaxColor Engine

т.е. как сделать так чтобы не выполнять для каждого свойства объекта User новый запрос :(

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Neco
Добавлено:25.05.2008 / 09:21
во-первых, используй параметры, а не склеивание запроса
001:
002:
003:
OleCommand.CommandText = "SELECT * from some_table where id=:id"

Colorized by: Eros.CodeSyntaxColor Engine

не знаю как в ole указывается параметр - написал ":" как у оракла, но возможно, что "@" как у сиквела.

далее, если пара username&userpass у тебя в таблице является уникальной (есть constraint), то можно работать через datareader
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
cmd.commandtext = "select * from userslist where userid=:userid and userpass=:userpass"
cmd.parameters.add("userid",varchar).value = userid
cmd.parameters.add("userpass",varchar).value = userpass
Dim rdr As oledatareader = cmd.executereader()
If (rdr.read())
Dim user As New myuser
user.id = to_int(rdr("id"))
user.name = to_str(rdr("name"))
user.description = to_str(rdr("desription"))
Else
Throw New myexception("no such user/pass")
End If

Colorized by: Eros.CodeSyntaxColor Engine


третье - в базе лучше хранить хэш пароля с подсаливанием username+constant.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Neco
Добавлено:25.05.2008 / 09:57
да, и пара советов:
1. лучше приучиться использовать using везде, где возможно. в приведённом тобой примере ты открыл соединение и не закрыл.
2. надо понять как пользоваться исключениями. по-моему:
001:
002:
003:
004:
005:
Catch oEx As Exception
   _ConnectionStatus = oEx.Message
  End Try

Colorized by: Eros.CodeSyntaxColor Engine

и
001:
002:
003:
004:
005:
006:
007:
If User.UID = Nothing Then
   Return Nothing
  Else
   Return User
  End If

Colorized by: Eros.CodeSyntaxColor Engine

только усложняют всё дело. процесс авторизации подразумевает два результата - либо юзер авторизован, либо нет. если авторизован, то выполняем следующие шаги, ну если не авторизован (неважно какая причина - неправильный пароль, база умерла, сетка накрылась, памяти не хватило), то это ошибка и надо донести её до "верхов". лучше всего это делать через exception, а не через результаты функции.
к примеру, ты сделал свою функцию с возможным возвратом null'а. тут сразу подразумевается, что использоваться функция будет как-то так:
001:
002:
003:
004:
005:
006:
007:
If (poluchitusera(param) IsNot Nothing) Then
' good!
Else
' а что здесь? почему nothing? база умерла? неправильный пароль? чтобы ответить на этот вопрос надо смотреть исходники.
End If

Colorized by: Eros.CodeSyntaxColor Engine

а если всё делать через исключения, то не надо никакой условной логики при использовании метода.

участок
001:
002:
003:
004:
005:
Catch oEx As Exception
   _ConnectionStatus = oEx.Message
  End Try

Colorized by: Eros.CodeSyntaxColor Engine

тоже меня смущает, ибо - зачем?
потом будет какой-то интелектуальный код по анализу _ConnectionStatus? а если предположить, что код формы находится от данной процедуры в пятидесяти вызовах методов, то как передать этот _ConnectionStatus в MessageBox.Show(Message)? а если пользователю станет мало Message - он захочет посмотреть CallStack? Ибо, если Message будет Not enough memory, то вообще ничего не будет понятно.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Arti
Добавлено:25.05.2008 / 12:30
Спасибо за подробный пример. Написал класс и метод добавления пользователя в базу
вот код посудите немного.
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
Imports System.Data
Imports System.Data.OleDb
Imports System.Windows.Forms

Public Class AccessData

  ' Поставщик данных
  Private _DataProvider As String
  ' Источник
  Private _DataSource As String
  ' Статус подключения
  Private _ConnectionStatus As String
  ' ошибка базы данных
  Private _DataBaseErrorMessage As String

  ''' <summary>
  ''' Получаем поставщика данных
  ''' </summary>
  ''' <value></value>
  ''' <remarks>Например для Access 2007 (Microsoft.ACE.OLEDB.12.0) для старых версий (Microsof.Jet.OleDb.4.0)</remarks>
  Public WriteOnly Property DataProvider() As String
    Set(ByVal value As String)
      _DataProvider = "Provider=" & value
    End Set
  End Property

  ''' <summary>
  ''' Путь к фалу данных
  ''' </summary>
  ''' <value></value>
  ''' <remarks>Например D:\MyBase.accdb</remarks>
  Public WriteOnly Property DataSource() As String
    Set(ByVal value As String)
      _DataSource = ";Data Source=" & value
    End Set
  End Property

  ''' <summary>
  ''' Смотрим что у нас там с подключением
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property ConnectionStatus() As String
    Get
      ConnectionStatus = _ConnectionStatus
    End Get
  End Property

  Public ReadOnly Property DataBaseErrorMessage() As String
    Get
      DataBaseErrorMessage = _DataBaseErrorMessage
    End Get
  End Property

  Public Sub New()
  End Sub
  ''' <summary>
  '''
  ''' </summary>
  ''' <param name="Provider">Microsoft.ACE.OLEDB.12.0 или Microsof.Jet.OleDb.4.0</param>
  ''' <param name="Source">D:\MyBase.accdb или D:\MyBase.mdb</param>
  ''' <remarks></remarks>
  Public Sub New(ByVal Provider As String, ByVal Source As String)
    _DataProvider = "Provider=" & Provider
    _DataSource = ";Data Source=" & Source
  End Sub

  ' делаем уничтожитель


  Public Sub RegisterUser(ByVal UserName As String, ByVal UserPass As String, ByVal FirstName As String, ByVal LastName As String)
    ' создаем подключение
    Dim OleConnection As New OleDbConnection(_DataProvider & _DataSource)
    Dim OleCommand As New OleDbCommand
    Try
      OleConnection.Open()
      ' Пишем в переменную класса результат подключения
      _ConnectionStatus = OleConnection.State.ToString

      OleCommand.CommandText = "INSERT INTO UsersList (UserName, UserPass, FirstName, LastName) VALUES (@UserName, @UserPass, @FirstName, @LastName)"
      OleCommand.Parameters.Add("UserName", OleDbType.VarChar).Value = UserName
      OleCommand.Parameters.Add("UserPass", OleDbType.VarChar).Value = UserPass
      OleCommand.Parameters.Add("FirstName", OleDbType.VarChar).Value = FirstName
      OleCommand.Parameters.Add("LastName", OleDbType.VarChar).Value = LastName
      OleCommand.Connection = OleConnection
      OleCommand.ExecuteNonQuery()
      OleConnection.Close()
      ' Пишем в переменную класса результат подключения
      _ConnectionStatus = OleConnection.State.ToString
    Catch err As Exception
      _DataBaseErrorMessage = err.Message
    Finally
      OleCommand.Dispose()
      OleConnection.Dispose()
    End Try
  End Sub
End Class

Colorized by: Eros.CodeSyntaxColor Engine


Если не затруднит ответьте ещё на пару вопросов, как лучше сделать проверку на наличе уже существующего пользователя(сейчас в базе поле UserName стоит как "Совпадения не допускаются") в случае такой ошибки в базе, уведомление можно получить через свойство DataBaseErrorMessage.
По поводу
лучше приучиться использовать using
как тогда сделать мой класс Disposable пример из MSDN не помог?
лучше хранить хэш пароля с подсаливанием username+constant
а вот это для меня совсем темный лес если не трудно расскажите как это дело реализовать и как работать потом с такими паролями?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: Neco
Добавлено:25.05.2008 / 13:23
делать класс disposable надо через реализацию интерфейса IDisposable.
но критично важно это только, если ты используешь неуправляемые ресурсы, если же всё управляемое, то можно и using даже не использовать и Dispose никогда не вызывать - среда рано или поздно сама начнёт вызывать финализаторы, а те в свою очередь Dispose методы. Но чем раньше высвобождаешь, тем лучше.
вообще, лучше стремиться к тому, чтобы не объявлять у своих классов поля, которые требуют dispose и инстанцируются внутри твоего класса - это усложняет разрушение. в методах Dispose как правило преобладают тупые If m_conn isnot nothing then m_conn.dispose и про них несложно забыть.
стремление к этому достигается за счёт того, чтобы использовать некий объект с Dispose только внутри метода - создал, разрушил.
у тебя все эти условия соблюдаются: у тебя в полях одни только string, значит тебе не нужно реализовывать IDisposable; все использования классов с Dispose в рамках одной процедуры.

использование в примере Try не вполне верное. предположим в строке 074 произойдёт ошибка - когда в этом случае закроется Connection?
по-моему, самый правильный способ (сам для себя решил - точных выдержек у авторитетных источников не помню), такой
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
OracleConnection conn = null;
      OracleCommand cmd = null;
      try {
        conn = new OracleConnection();
        cmd = new OracleCommand();
        // work;
      } finally {
        if (conn != null) conn.Dispose();
        if (cmd != null) cmd.Dispose();
      }

Colorized by: Eros.CodeSyntaxColor Engine

инициализация с null нужна, чтоб компилятор не пел нам про то, что мы неинициализированную переменную можем использовать.
тут две хреновости, по крайней мере - многа букафф и никто не запрещает нам продолжать использовать conn и cmd после этого блока, хотя это гарантированно приведёт к ошибке выполнения.
теперь пример с using:
001:
002:
003:
004:
005:
006:
007:
using (OracleConnection conn = new OracleConnection()) {
        using (OracleCommand cmd = new OracleCommand()) {
          // work;
        }
      }

Colorized by: Eros.CodeSyntaxColor Engine

и букв мало и scope жёсткий.

проверку существования имени пользователя - я бы сделал тупо пытаясь вставить, база бы ругалась с указанием имени constraint'а, я бы перехватывал это сообщение и переводил его на пользовательский язык.
я уже так делал на реальной системе - все OracleException, какие часто попадаются (остальные выводил в оригинальном виде), я перехватывал, смотрел на номер ошибки, если это был constraint'овый, то я в тексте ошибки пытался искать названия constraint'ов (длинющий такой список с if'ами получился) и если что-то находил, то перепаковывал в новый exception с более человечным названием и толкал исключение дальше к верху. хотя вся эта штука у меня была уже довольно близко к "поверхности" и там пости сразу просто message показывался юзеру и всё.
в результате "unique constraint UQ_USERNAME" превращался в "Пользователь с таким именем существует" или типа того.

сразу хочу предупредить, что проверять перед вставкой select'ом не вполне правильно по той причине, что может происходить множество вставок в одно и то же время и получится так:
1. юзер1 проверяет имя "вова" и не находит в базе
2. юзер2 проверяет имя "вова" и тоже не находит в базе
3. юзер2 вставляет имя "вова" в базу и фиксирует транзакцию (стуки-стуки)
4. юзер1 вставляет имя "вова" и обламывается.

т.е. как не проверяй - всё равно существует вероятность получить оригинальный текст ошибки - т.е. фактически на одну и ту же логическую ошибку получаем два вида ошибок - один свой, другой от БД.

по хэшу, делаю так, хотя может и не совсем правильно, но мне хватает:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
public static string MD5Hash(string data, string salt)
    {
      using (MemoryStream ms = new MemoryStream(Encoding.default.GetBytes(data + (785).ToString() + salt + (159).ToString())))
      {
        MD5 md = MD5.Create();
        return Convert.ToBase64String(md.ComputeHash(ms));
      }
    }

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Arti
Добавлено:25.05.2008 / 18:11
предположим в строке 074 произойдёт ошибка - когда в этом случае закроется Connection?

с Using-ом не врубился, если в блок Try и в его конец End Using тогда опять же если в 074 строчке ошибка то до End Using дело не дойдет, вобщем не совсем понял если не трудно покажите на примере моего кода.
Ну а если без Nothing тогда вот так
001:
002:
003:
004:
005:
006:
Finally
      If Me.ConnectionStatus = "Open" Then OleConnection.Close()
      OleConnection.Dispose()
      OleCommand.Dispose()

Colorized by: Eros.CodeSyntaxColor Engine

или тогда смысла нету, лучше через Nothing?
проверку существования имени пользователя - я бы сделал тупо пытаясь вставить, база бы ругалась с указанием имени constraint'а, я бы перехватывал это сообщение и переводил его на пользовательский язык.

вот это действительно задача не простая, во вложении пример того что возвращает база когда пытаемся создать уже существующего пользователя. Сразу попутный вопрос, как получать от базы коды ошибок а не разъяснение что там случилось чтобы потом проще было через Selec Case переводить на пользовательский язык.
по хэшу, делаю так, хотя может и не совсем правильно, но мне хватает:

а стоит ли его шифровать, если ни у кого из пользователей доступа к файлу базы данных не будет.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: Neco
Добавлено:25.05.2008 / 19:21
если в 074 строчке ошибка то до End Using дело не дойдет

до end using'а дело дойдёт всегда - я же написал, что конструкция
001:
002:
003:
004:
005:
006:
007:
using (OracleConnection conn = new OracleConnection()) {
    using (OracleCommand cmd = new OracleCommand()) {
     // work;
    }
   }

Colorized by: Eros.CodeSyntaxColor Engine

это аналог конструкции
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
OracleConnection conn = null;
   OracleCommand cmd = null;
   try {
    conn = new OracleConnection();
    cmd = new OracleCommand();
    // work;
   } finally {
    if (conn != null) conn.Dispose();
    if (cmd != null) cmd.Dispose();
   }

Colorized by: Eros.CodeSyntaxColor Engine

только короче и с жёстко ограниченным scope'ом действия

Ну а если без Nothing тогда вот так
Finally
If Me.ConnectionStatus = "Open" Then OleConnection.Close()
OleConnection.Dispose()
OleCommand.Dispose()
или тогда смысла нету, лучше через Nothing?

не - чёт я тебя совсем запутал - юзай using'и не ошибёшся.

вот это действительно задача не простая, во вложении пример того что возвращает база когда пытаемся создать уже существующего пользователя. Сразу попутный вопрос, как получать от базы коды ошибок а не разъяснение что там случилось чтобы потом проще было через Selec Case переводить на пользовательский язык.

это зависит от провайдера, думаю - у оракла что-то было.

у меня sql 2005 возвращает
Cannot insert duplicate key row in object 'dbo.employee' with unique index 'IX_employee'.
The statement has been terminated.

т.е. имя constraint'а тоже указывается.

но вот номера ошибки что-то я не нашёл :)
у exception'а в Data есть какие-то поля, но это уже хождение по мукам...

ничего не поделаешь - придётся юзеру показывать что-то типа "ошибка БД", а в качестве деталей - вот это твоё сообщение (лучше его напрямую не показывать поскольку язык может отличаться от языка программы).

а стоит ли его шифровать, если ни у кого из пользователей доступа к файлу базы данных не будет.

это не шифрование - это хэширование. делается для того, чтобы даже если ты админ - всё равно не мог получить пароли пользователей. из хэша невозможно получить пароль обратно - только подбором (да и то - надо знать методы подсаливания).

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Arti
Добавлено:25.05.2008 / 19:44
до end using'а дело дойдёт всегда

Ну так до Finally тоже, наверно. Если через Using где тогда должен быть Catch чтобы перехватить исключение базы? Если для Вас не трудно пожалуйста на VB.NET потому как я начинающий, а с C# даже рядом не стоял :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 9 | Автор: Neco
Добавлено:25.05.2008 / 20:06
а, ну я недосмотрел немного - оказывается там соединение открывается уже внутри блока try. это меняет дело в пользу того, что висеть открытое соединение не будет - но вот некие ресурсы могут инициализироваться во время выполнения конструктора - вот эти ресурсы и будут висеть пока эти объекты не уничтожит сборщик мусора.
важно понимание, что на участке
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
Dim OleConnection As New OleDbConnection(_DataProvider & _DataSource)
  Dim OleCommand As New OleDbCommand
  Try
   OleConnection.Open()
   ' Пишем в переменную класса результат подключения
   _ConnectionStatus = OleConnection.State.ToString

   OleCommand.CommandText = "INSERT INTO UsersList (UserName, UserPass, FirstName, LastName) VALUES (@UserName, @UserPass, @FirstName, @LastName)"
   OleCommand.Parameters.Add("UserName", OleDbType.VarChar).Value = UserName
   OleCommand.Parameters.Add("UserPass", OleDbType.VarChar).Value = UserPass
   OleCommand.Parameters.Add("FirstName", OleDbType.VarChar).Value = FirstName
   OleCommand.Parameters.Add("LastName", OleDbType.VarChar).Value = LastName
   OleCommand.Connection = OleConnection
   OleCommand.ExecuteNonQuery()
   OleConnection.Close()
   ' Пишем в переменную класса результат подключения
   _ConnectionStatus = OleConnection.State.ToString
  Catch err As Exception
   _DataBaseErrorMessage = err.Message
  Finally
   OleCommand.Dispose()
   OleConnection.Dispose()
  End Try

Colorized by: Eros.CodeSyntaxColor Engine

ошибка может произойти на строке Dim OleCommand As New OleDbCommand и метод OleCommand.Dispose() не выполнится.
насчёт catch - using нужен только для гарантированного уничтожения объектов. но по-моему в твоём коде все эти махинации с ex.message лишние и catch там и не нужен вовсе.

насчёт vb.net - ну не установлен он у меня дома. установлен тока c# да и тот express. :)
а с работы если буду писать - то на vb :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Подключится к Access | Автор: Arti
Добавлено: 23.05.2008 / 19:29 | ответов: 3 | просмотров: 69

Скажите как вручную(без мастера Data Source) подключится к Access и прочитать значение первого столбика(column1) таблицы(Table1) где значение второго(column2) равно 25. Если не трудно накидайте пример пожалуйста.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:24.05.2008 / 04:34
Класс для работы с базами данных MS Access (см. ответ #1)
продолжение, если возникнуть проблемы с первым :)
тут тоже может что-то интересное найдется
Примеры работы с базами данных средствами Visual Basic .NET

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Arti
Добавлено:24.05.2008 / 17:09
Как можно запихать DataTable в ListView

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Arti
Добавлено:24.05.2008 / 19:09
Разобрался :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Нестандартная форма
Автор: Zhenik Ipatov | добавлено: 05.05.2008 / 12:42 | просмотров: 184

Первое что бросается в глаза, когда первый раз используешь программу это конечно же её облик, внешний вид. Есть вероятность что если пользователю не понравится внешний вид окна, то он не будет пользоваться продуктом. Значит нам, не побоюсь этого слова, программистам нужно как можно лучше, удобнее, понятнее, красивее и приветливее сделать лицо программы. Нужно как можно эффектнее преподнести программу. С самого первого появления Windows окна получили прямоугольный стандарт и все User Control’ы

Как узнать размер базы данных MySQL через php
Автор: Николай Рудченко | добавлено: 14.02.2008 / 13:01 | просмотров: 667

В этой небольшой статье вы узнаете, как получить размер вашей базы данных (БД) MySQL используя язык программирования PHP.

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 5268

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 8561

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 2327

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Запись куков (Cookies)
Дата добавления: 01.08.2006 / 12:00 | просмотров: 1667 | платформа: ASP

Запись данных в файл
Дата добавления: 31.07.2006 / 17:20 | просмотров: 1443 | платформа: ASP .NET (VB)

Как запретить перезагрузку страницы при нажатии на кнопку (Button/LinkButton)?
Дата добавления: 31.07.2006 / 13:08 | просмотров: 2354 | платформа: ASP .NET (VB)

Как определить, загружена форма или нет?
Дата добавления: 31.07.2006 / 12:02 | просмотров: 1323 | платформа: VB

Удаление файла
Дата добавления: 31.07.2006 / 17:28 | просмотров: 1451 | платформа: ASP .NET (VB)

Поиск предложений
Дата добавления: 24.03.2007 / 11:06 | просмотров: 1310 | платформа: RegEx

Как узнать IP-адрес текущего посетителя?
Дата добавления: 31.07.2006 / 15:34 | просмотров: 2439 | платформа: ASP .NET (VB)

Как узнать IP-адрес посетителя?
Дата добавления: 01.09.2006 / 12:20 | просмотров: 2342 | платформа: ASP

Как ограничить передвижение мыши?
Дата добавления: 16.08.2006 / 19:46 | просмотров: 1347 | платформа: VB

Как нарисовать что-либо на Form/PictureBox?
Дата добавления: 24.03.2007 / 10:15 | просмотров: 1399 | платформа: VB .NET

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

На работе не вышла секретарша, ком. директор мучается, кто напечатает ему документ. Соглашаюсь, печатаю, даю прочитать и спрашиваю сколько экземпяров распечатать?
Ответ был уверенный: " Конечно, два, я же один им по факсу отправлю!"

 

Рейтинг: 316
Всего голосов: 505
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Жила-была Красная Шапочка. Как-то раз идет она по лесу,плачет - вся в слезах. Встречает Медведя.
- Почему ты плачешь, Красная Шапочка?
- Понимаешь, Медведь, в моем возрасте у девочек уже появляются волосики на лобке, а у меня ничего нет. Ну как мне не плакать?!
Сжалился Медведь над девочкой, оторвал себе хвост да и приставил к лобку Красной Шапочки.
С тех пор у медведя нет хвоста.
Идет дальше по лесу Красная Шапочка, и вдруг опять начинает плакать. А навстречу ей идет Аист.
- Отчего ты так плачешь, Красная Шапочка?
- Ну как мне не плакать, дорогой мой Аист, ведь в моем возрасте девченки давно уже не девственницы, одна я такая хожу...
Сжалился Аист над девочкой, взял да и порвал клювом целочку.
С тех пор у всех аистов красные клювы.
Идет дальше Красная Шапочка, выходит к озеру, садиться на берег и начинает плакать еще пуще прежднего. Выходит из озера Золотая Рыбка и спрашивает:
- Почему ты так плачешь, Красная Шапочка?
- Как не плакать, Рыбка, ведь в моем возрасте уже все девчонки знают что такое оргазм и испытали его, только я вот понятия не имею что это такое...
Сжалилась Золотая Рыбка, вышла из воды, поработала хвостиком и довела девушку до оргазма.
Но с тех пор так никто и не может понять: то ли пи..да пахнет рыбой, то ли рыба пахнет пи..дой...

 

Рейтинг: 226
Всего голосов: 330
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Что общего между морской свинкой и женщиной-программистом?
То, что морская свинка - она и не свинка, и не морская.

 

Рейтинг: 294
Всего голосов: 461
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

У одной провайдерской фирмы спросили:
- Почему Вы так активно создаете сервисы бесплатного e-mail?
- Ну, как Вам сказать...
А Вы читали когда-нибудь чужую почту?

 

Рейтинг: 317
Всего голосов: 483
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Выходной выдался посреди недели. Дай, думаю, в кино схожу на дневной сеанс, все билеты дешевле. Набрал всей этой хренотени, что к фильму полагается, поп-корн, колу и т.д. Сижу. Передо мной усаживаются две девчонки, явно с бодуна, одна еще ничего, а другую явно колбасит, то куртку снимет, то наденет, минералка в ее бутылке на глазах исчезает. Потом вроде подотпустило ее, а фильм все не начинается. И тут она своей подруге говорит: "Кать, ты следи, чтобы я не заснула". На что подруга ей отвечает: "Делать мне больше нечего, за тобой следить. Мне, вообще, пофиг, спишь ты или нет. Главное, чтоб ты дышала!" Душевная подруга.

 

Рейтинг: 317
Всего голосов: 500
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Почему считается, что Windows 2000 не падает?
- А куда ей падать, если она ничего не поддерживает.

 

Рейтинг: 318
Всего голосов: 478
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Проводил я как-то курсы для учителей информатики. Народ собрался уже поднатасканный и юзающий классы УКНЦ. Для тех кто не знает такого зверя, поясню - машинка семейства ДВК-2,3 только по немного круче. И на второй или третий день сдох монитор у одной из машин. Менять было лениво и я подключил монитор от соседней сдохшей машины, оставив все на своих местах. Первый день сам глючил по черному и веселил народ тем, что набирал команды на нерабочей клаве и не врубался почему их не видно на экране. Но самый прикол случился на следующий день. Показываю народу одну программку. Один из учителей постоянно отвлекается, но услышав, что прога защищены от случайного сброса, проявляет активный интерес. Просит разрешить проверить самому. Я не возражаю. Тогда он на нерабочей клаве жмет пимпочку "Стоп". Прога работает. И хотя и у нее действительно была защита от нажатия на эту клавишу, мне становится весело.
- Это еще что - говорю я
И продолжаю:
- У нее есть защита и от reset-а
Мужик недоверчиво улыбается. А я предлагаю ему проверить. Он делает reset опять же на нерабочей машине и улыбка у него сменяется недоуменеем. Он знает, что это в принципе не возможно, но ведь, как ему кажется, видел своими глазами. Народ начинает угорать. А я продолжаю веселиться вовсю и заявляю мужику, что прога защищена даже от выключения питания. Он отвечает, что уж этого то точно не возможно и щелкает все на той же тачке сетевым тумблером. Его лицо становится тупее всего троллейбусного парка, он видит на экране работающую программу. Народ от хохота чуть не попадал со стульев на пол. И только тут до этого товарища дошло, что попросту разыграли. Человек оказался с чувством юмора и сам не раз вспоминал до конца курсов об этом приколе со смехом.

 

Рейтинг: 329
Всего голосов: 493
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Пора Остановиться Если:

- В самолете или поезде уделяете больше внимания notebook’у, сдав ребенка в багаж.
- Ваша жена говорит, что вы в последнее время мало общаетесь, поэтому вы решили купить второй компьютер и сделать дома LAN, что бы вы могли поболтать по аське.
- Решаете остаться на работе или в институте ещё на пару годиков из-за бесплатного интернета.
- думаете, что неудачники и бедняки это люди, которые имеют MODEMы на 28.8 kB/s.
- Используете смайлики в обычной бумажной почте.
- Не знаете пол ваших трех лучших друзей, потому что у них нейтральные ники, а спросить вам не приходило в голову.
- Хотите улыбнуться, наклоните голову на 90 градусов.
- Купание в ванне называете "downloading".
- Решил поменять кресло на унитаз.
- Выключая MODEM, чувствуете себя так, как будто только что предали лучшего друга.
- Новым знакомым представляетесь как "вася маил точка ру".
- Ваше сердце колотится быстрее, когда в телевизоре видите интернетовский адрес какой-либо компании.
- Прежде чем покинуть комнату, поставите динамики на полную громкость, что бы не пропустить момент прихода новой почты.
- Все ваши знакомые и друзья имеют в своём имени знак "@" (напр. Миш@, С@ш@).
- Ваше домашнее животное имеет личную домашнюю страничку.
- Не можете позвонить родителям – у них нет MODEMа.
- проверяете e-mail, если новых сообщений нет – проверяете снова.
- Часа в два ночи пойдете в туалет и останетесь у компьютера до утра.
- Жена вам раз и навсегда запретила брать notebook в постель.
- Ваших детей зовут: девочку - Altavista или VISA, мальчика - Yahoo или Chat...
- Кличка вашей собаки Linux или Fox.
- Зимой вообще не выключаете монитор – от него теплее.
- используете HTML-TAGи в Microsoft Wordе.
- думаете, что люди, которые используют "Microsoft Photo Editor" вместо "Corel Photopaint" идиоты.
- Любите Билла Гейтса.
- Отслеживаете ошибки ошибок.(ошибочная ошибка = ничего ошибочного)
- Лучше реагируете на "go2work&earn4me_some$.com", чем на "иди на работу и заработай для меня немного денег, давай!"
- У вас не зависают Windows.
- Умеете читать и без проблем понимаете машинный код.
- Каждых два-три часа чистите proxy cashe.
- В бумажных формулярах инстинктивно заполняете:
Имя и фамилия: (ваш ник, Alias)
Компания: N/A
Возраст: од...до(напр. между 18 и 25)
Дети: так же (напр. От 1 до 3)
Месячный заработок: (серийный номер)
- Иногда говорите с телевизором.
- Программа имеет физический вес „весит“.(напр. 150 килограмм)
- Самая маленькая часть чего угодно - бит.
- Не знаете что это за служба „Tech Support“.
- Вы там работаете, но на телефонные звонки не отвечаете, потому что "в трубке" у всех сплошные вопросы и проблемы.
- Компьютер – бестолковое железо, пока не подключен на интернет.
- Рекламные проспекты в реальном почтовом ящике - SPAM. Относится и к повесткам и фактурам.
- жалко, что книги нельзя выделить и скопировать.
- Вас возбуждает чтение log-файлов squid'a.
- познакомясь с девушкой, сразу спрашиваете какой у нее IP-адрес.
- IP-адрес динамический, значит девушка легкого поведения.
- Коллеги вам говорят, что у вас все работает как dev/shit, через dev/ass, у вас кривые dev/hands и маленький dev/brain. Не знаете о чем это они.
- в Linuxе напишете "$ make love" или "$ man woman".
- К вам подойдет сын и спросит: "Как устроен телевизор?", то вы ответите: "RTFM!". А если сын спросит: "man TVSet". Подробно ему все расскажете, даже если он уже не будет этого хотеть.
- Не ходите в церковь, потому что не знаете URL.
- Постоянно вам хочется и иногда пишите:
„let x = 7;“
или
„if (value == 0)
return value;
else
return 0;".
Fi
- У вас в машине стоят факс, принтер, телетайп и SWIFT.
- Вашего ребенка сначала учите считать до 256.
- У телевизора есть монитор и LPT.
- Для вас OS/2 = PS2
- Школьная доска = монитор(мой учитель) ?
- Для вас LPT = LTP.
- Для вас BASIC = BIOS.
- Ваши зрачки увеличиваются, когда видите "CONNECT 17689/VOICE".
- Сможете пропищать хотя бы на 1200.(MODEM’овый тон)
- Не мечтаете о MODEMе на 115200.
- Имеете такой MODEM.
- Уже не можете определить время на механических часах.
- Мечтаете о приборе "assessometr".
- Пишете книгу с рабочим названием "Контрольные системы для Ядерных Электростанций на базе Windows 95"
- Долго решаете что лучше: „налепить обои или растянуть одну картинку.“
- В магазине с умным видом: "Коробочку хард дисков, пожалуйста".
- WWW,FTP,HTTP,DHTML,URL,SPOOL,MODEM,IRQ,PPP,DOS – не сокращения, а нормальные слова.
- Имеете татуировку "This body best viewed with Internet Explorer 4.0 or higher".
- При ДТП инстинктивно ищете кнопку "BACK".
- думаете, что телевизор имеет плохое разрешение. Примерно 640 на 480
- пишете в С++ программу для калькулятора.
- Вы написали вирус для калькулятора.
- Как только это прочитаете, сразу распечатаете.
- Используете слова и выражения типа:
Internet Exploder
Outloop Exchanger
Netscape Complicator
Teer To Teer NetWork
10,578 kegabytes
2 zillion
300 MHz RAM
Cursing flasher
CONSYS.FIG
SETUP.EXERSIZE
Microword Soft
Microwave Windows
Netscape Explorer
Microscope Exploiter
Newscape
Outlook Exposure
Corel WordPerfect для IBM
Megadrives
Windows 94
Backsplash
Backstage
Backcase
SoaperCase
LoverCase
CaseSeniletive
CaseInsectitive
...It is NOT safe for me to turn off my computer...
200 horse power hard drive
Cadle Mobem
Pinteum
Mudem
Momed
386 Pentium
486DX Pentium
US Robotics Sportscaster modem
Unnecessary disk space
__
User Unknown

 

Рейтинг: 303
Всего голосов: 494
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Прикол с Файн Ридером. Это программа такая, которая вроде как распознаёт текст введённый со сканера. Чуство юмора у неё сродни её брату - переводчику Lingvo (видать семейное). Так вот. Недавно приятель попросил отсканировать и естессно распознать для реферата одну медицинскую книжку. Нужно сказать, книжка была здоровая и на месте сгибов Великий распознаватель вместо некоторых букв ставил разные палочки (типа / ] l и пр.), по его мнению более похожие на оригинал. Я значит потом читаю (как раз описание какой-то страшной болезни, мурашки по коже), исправляю недочёты и вот вижу такой перл, цитирую: "...вероятность летального исхода после этой болезни незначительная :]" это он в конце смайлик добавил, вроде как понял шутку :)))

 

Рейтинг: 368
Всего голосов: 543
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Профессор достаёт из портфеля свёрток:
- У меня есть великолепный экземпляр лягушки, который мы сегодня препарируем.
- Профессор, это же бутерброд с колбасой!
- Да? А что же я тогда сегодня съел на завтрак?

 

Рейтинг: 382
Всего голосов: 572
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное