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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

extasy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день. Подскажите чем отличаются задания параметров в mysql:
 

Цитата:
MySqlCommand cmd = _mysqlDb.CreateCommand();
cmd.CommandText = "SELECT * FROM abc WHERE id=:id";
cmd.Parameters.Add("id", MySqlType.Int).Value = 1;

 

Цитата:
MySqlCommand cmd = _mysqlDb.CreateCommand();
cmd.CommandText = "SELECT * FROM abc WHERE id=@id";
cmd.Parameters.Add("@id", MySqlType.Int).Value = 1;

 
И можно ли как-то добавить параметр с типом строка, но чтобы в результирующем sql-запросе он появился без окружающих кавычек?
Для чего? Чтобы передать строку в IN
 

Цитата:
 
string ids = "1,2,3,4,5";
MySqlCommand cmd = _mysqlDb.CreateCommand();
cmd.CommandText = "SELECT * FROM abc WHERE id IN (:ids)";
cmd.Parameters.Add("ids", MySqlType.VarChar).Value = ids;

 
Нужно чтобы получалось

Цитата:
SELECT * FROM abc WHERE id IN (1,2,3,4,5)

а не

Цитата:
SELECT * FROM abc WHERE id IN ('1,2,3,4,5')

Всего записей: 429 | Зарегистр. 18-05-2006 | Отправлено: 15:50 27-06-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
extasy
Если у вас запрос формируется в коде приложения, то почему не сделать сразу так
Код:
cmd.CommandText = "SELECT * FROM abc WHERE id IN (1,2,3,4,5)";
?
 
Добавлено:
Если диапазон значений непрерывный, и всегда известно начальное и конечное значения этого диапазона (1, 2, 3, 4, 5), то можно немножко переделать запрос
Код:
SELECT * FROM abc WHERE id >= :min and id <= :max
и передать 2 числовых параметра вместо одного строкового.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 08:57 28-06-2011 | Исправлено: Mextrom, 09:23 28-06-2011
extasy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom
Да, формируется в коде приложения.
Сейчас делается что-то типа  
 

Код:
string ids = "";
// тут выбираются, отбрасываются нужные/ненужные id  в строку ids, таким образом,
// что она получается вида "N,N,...,N"
MySqlCommand cmd = _mysqlDb.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM abc WHERE id IN ({0})", ids);
 

 
А хотелось бы делать все унифицировано, через параметры.
Да и вопрос про различия @parameter и :рarameter остается...

Всего записей: 429 | Зарегистр. 18-05-2006 | Отправлено: 13:58 28-06-2011 | Исправлено: extasy, 14:01 28-06-2011
Bluk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята такая проблема.
Есть файл автозапуска написанный на дельфи этот файл вызывает другой файл в деректорие с расширением exe написанный на C# мной, после чего моя программа должна запускать файл в том каталоге в котором она находится, но этого не происходит так как моя программа возвращает почему то каталок файла авторана а не свой каталог.
Вопрос из за чего это может быть?

Всего записей: 164 | Зарегистр. 14-08-2005 | Отправлено: 22:36 05-07-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bluk
Каталог указываете неправильно или не указываете вообще. Если у вас WinForms приложение, то путь к каталогу программы можно получить через Application.StartupPath. И желательно код увидеть, где вы файл запускаете.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 09:46 06-07-2011
habraman

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть 2 программы, клиент и сервер.  
Код Сервера:  
 

Код:
 
 
Imports System.Net.Sockets  
Imports System.Text  
Public Class Form1  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
        Dim serverSocket As New TcpListener(1009)  
        Dim requestCount As Integer  
        Dim clientSocket As New TcpClient  
        serverSocket.Start()  
        ListBox1.Items.Add(">> Сервер запущен")  
        ListBox1.Items.Add(">> Порт 1009 открыт")  
        clientSocket = serverSocket.AcceptTcpClient()  
        ListBox1.Items.Add(">> Клиент присоединился")  
        requestCount = 0  
        While (True)  
            Try  
                requestCount = requestCount + 1  
                Dim networkStream As NetworkStream = clientSocket.GetStream()  
                Dim bytesFrom(10024) As Byte  
                networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))  
                Dim dataFromClient As String = System.Text.Encoding.ASCII.GetString(bytesFrom)  
                dataFromClient.Substring(0, dataFromClient.IndexOf("$"))  
                MsgBox("Data from client -  " + dataFromClient)  
                Dim serverResponse As String = "Server response " + Convert.ToString(requestCount)  
                Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(serverResponse)  
                networkStream.Write(sendBytes, 0, sendBytes.Length)  
                networkStream.Flush()  
                MsgBox(serverResponse)  
            Catch ex As Exception  
                MsgBox(ex.ToString)  
            End Try  
        End While  
        clientSocket.Close()  
        serverSocket.Stop()  
        MsgBox("Exit")  
    End Sub  

 
 
и код Клиента:  
 

Код:
 
Imports System.Net.Sockets  
Imports System.Text  
Public Class Form1  
    Dim clientSocket As New System.Net.Sockets.TcpClient()  
    Dim serverStream As NetworkStream  
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click  
        End  
    End Sub  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
        If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then  
            MsgBox("Заполните все поля!", MsgBoxStyle.OkOnly)  
        Else  
            clientSocket.Connect(TextBox1.Text, TextBox3.Text)  
            Dim serverStream As NetworkStream = clientSocket.GetStream()  
            Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes("123$")  
            serverStream.Write(outStream, 0, outStream.Length)  
            serverStream.Flush()  
            Dim inStream(10024) As Byte  
            serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize))  
            Dim returndata As String = System.Text.Encoding.ASCII.GetString(inStream)  
            MsgBox("Data from Server : " + returndata)  
        End If  
    End Sub  
End Class  

 
 
Подскажите, как сделать так, чтобы на сервер отправлялся текст из текстбокса и там соответственно в текстбоксе выводился. На данный момент на сервере выводится текст 123 в MsgBox'е.  
Я так подозреваю, что решение этой проблемы кроется где-то в этом районе  
 

Код:
 
Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes("123$")  
serverStream.Write(outStream, 0, outStream.Length)  

Всего записей: 8 | Зарегистр. 28-02-2011 | Отправлено: 12:49 06-07-2011
Bluk



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

Цитата:
Mextrom

Да верно неправильно определял катало, не через тот класс делал это делал.
Спасибо

Всего записей: 164 | Зарегистр. 14-08-2005 | Отправлено: 21:01 06-07-2011
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bluk
Функции для получения директории из которой запущена программа
delphi   -
 ExtractFilePath(Application.Exename)
C# -
 Application.StartupPath
 
У вас такие функции используются для получения директории с исполняемыми файлами программ ?
 
Добавлено:
Ой, сорри, не увидел что уже ответили на вопрос...

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 23:39 06-07-2011
extasy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ап
Может кто-то все таки просветит?
http://forum.ru-board.com/topic.cgi?forum=33&topic=3706&start=2600#1

Всего записей: 429 | Зарегистр. 18-05-2006 | Отправлено: 13:19 12-07-2011
AutoIT



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте форумчане.  
Вопрос краток - Почему класс AutoItX3Class не хочет интегрироваться в .NET FW4 (VS2010, C#), хотя в версии 3,5 и младше интегрируется без проблем, может быть есть хитрости (тонкости) в использовании? Ошибка возникает следующая: Внедрение типа взаимодействия "AutoItX3Lib.AutoItX3Class" невозможно. Используйте вместо него доступный интерфейс.

Всего записей: 77 | Зарегистр. 04-12-2008 | Отправлено: 09:59 13-07-2011
lerthe61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
extasy
попробую ответить на последний вопрос - касаемо использования строкового параметра:
такой возможности нет и сделано это намеренно, так как такое поведение допускало бы SQL Injection. В вашем же случае, следует смотреть в сторону динамического создания SQL.

Всего записей: 74 | Зарегистр. 04-05-2007 | Отправлено: 18:47 19-07-2011
StanFreeWare

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по сериализации. Есть функция  
 
        internal static CmpLastWriteTimes TryRestore(string fileName)
        {
            CmpLastWriteTimes result = null;
            if (File.Exists(fileName))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(CmpLastWriteTimes));
                using (StreamReader reader = new StreamReader(fileName))
                {
                    result = serializer.Deserialize(reader) as CmpLastWriteTimes;
                }
            }
            return result;
        }
 
можно ли обобщить ее таким образом, чтобы либо передать информацию о том, что эта фукнция должна десериализовать именно CmpLastWriteTimes, либо как-либо разместить ее внутри класса CmpLastWriteTimes с той же целью.
 
Просто имею кучу подобных классов с подобной функцией в каждом, и не хотелось бы repeat yourself..
 
Тем более, что сериализация решилась элементарно - закидыванием в базовый класс логики типа
        public void SerializeToXml(string fileName)
        {
            XmlSerializer serializer = new XmlSerializer(this.GetType());
            using (StreamWriter writer = new StreamWriter(fileName))
            {
                serializer.Serialize(writer, this);
            }
        }

Всего записей: 865 | Зарегистр. 10-01-2007 | Отправлено: 10:57 20-07-2011
lerthe61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StanFreeWare
К саожалению вы не сообщили версию фреймворка которую используете, но подобное можно решить при помощи Generics (и расширений), будет выглядеть примерно так:

Код:
 
    public static class Extensions
    {
        public static T TryRestore<T>(this T entity, string fileName)
            where T : BaseData
        {
            T result = null;
            if (File.Exists(fileName))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                using (StreamReader reader = new StreamReader(fileName))
                {
                    result = serializer.Deserialize(reader) as T;
                }
            }
            return result;
        }  
    }
 

это добавит для каждого класса, унаследованного от BaseData метод TryRestore.

Всего записей: 74 | Зарегистр. 04-05-2007 | Отправлено: 15:37 20-07-2011 | Исправлено: lerthe61, 15:47 20-07-2011
StanFreeWare

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lerthe61
Огромное спасибо, это работает!
Правда, не совсем понял, зачем нужен первый параметр - entity в случае TryRestore?
C таким entity должна быть статическая фукнция сериализации, если вставить ее в тот же класс Extensions.
Даже получилось вообще отказаться от базового класса BaseData:
 

Код:
  public static class Extensions
    {
        public static void SerializeToXml<T>(T entity, string fileName)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            using (StreamWriter writer = new StreamWriter(fileName))
            {
                serializer.Serialize(writer, entity);
            }
        }
 
        public static T TryRestore<T>(string fileName)
            where T : class
        {
            T result = null;
            if (File.Exists(fileName))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                using (StreamReader reader = new StreamReader(fileName))
                {
                    result = serializer.Deserialize(reader) as T;
                }
            }
            return result;
        }  
    }  


Всего записей: 865 | Зарегистр. 10-01-2007 | Отправлено: 10:26 21-07-2011 | Исправлено: StanFreeWare, 10:52 21-07-2011
lerthe61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StanFreeWare
Вы правы, entity в случае с TryRestore было явно лишне
А ключевое слово this добавляется для того, что бы была возможность вызывать метод как будто он реализован в классе который идет после. Вот как это выглядит:
http://msdn.microsoft.com/ru-ru/library/bb383977.aspx

Всего записей: 74 | Зарегистр. 04-05-2007 | Отправлено: 11:29 22-07-2011
StanFreeWare

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lerthe61
Попробовал this. Веселая штуковина ))

Всего записей: 865 | Зарегистр. 10-01-2007 | Отправлено: 17:09 22-07-2011 | Исправлено: StanFreeWare, 17:10 22-07-2011
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, куда копать..
Нужно на странице в IE сделать грид с данными из акесса.
На .NET.
Как  проще и быстрее сделать?
 
 
 

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 23:00 01-08-2011
Mextrom



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

Цитата:
Подскажите, куда копать..
Нужно на странице в IE сделать грид с данными из акесса.
На .NET.
Как  проще и быстрее сделать?  

Посмотрите здесь.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 09:27 02-08-2011
pain205

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я только начал изучать C #. Пишу специальный калькулятор.
Подскажите пожалуйста как сделать, чтобы при вводе в поле textBox вводились только цифры? Или из этого поля переменной присваивалось только значения типа double? Проблема в том, что при вводе, например, 12.1 (а не 12,1) происходит ошибка при расчётах. Заранее спасибо.

Всего записей: 3 | Зарегистр. 05-07-2011 | Отправлено: 19:28 08-08-2011
Molniev

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

Цитата:
Подскажите пожалуйста как сделать, чтобы при вводе в поле textBox вводились только цифры?

Через PreviewKeyDown, выставляя
Код:
e.IsInputKey = false;

Но у меня не получилось((
Другой вариант - KeyPress/KeyUp и анализировать всю строку, удаляя лишние элементы.
 

Цитата:
Или из этого поля переменной присваивалось только значения типа double?


Код:
            double x = 0;
            if (double.TryParse(textBox1.Text, out x))
                textBox1.Text = (x * 10).ToString();

TryParse - возвращает true если удалось преобразовать строку в число, и результат преобразования во второй параметр. Обратите внимание на модификатор out.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 20:47 08-08-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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