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

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


Выпуск # 697

Друзья! Прошло совсем мало времени с момент последнего выпуска, и вот уже новый! Удивительно, как быстро летит время в Интернете, сколько всего нового происходит ежедневно, да что там, ежесекундно. И Kbyte.Ru в этом плане не исключение, на сайте столько всего произошло, столько всего, что многое даже и не влезло в этот выпуск! И кто только придумал ограничения скорости интернет-соединения и объемов писем! Эх..., благо на сайте есть живая лента событий, которая не даст потеряться среди гущи событий.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


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

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Пишу приложение которое будет работать з БД.
Оно состоит из MDIparentForm ну и ChildForm.
Для удобства создал свой класс, чтобы в каждой ChildForm-е не описывать по новой подключение, адаптер, DataSet, DataTable.
класс:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlServerCe;

namespace Salary
{
class GetDataFromDataBase
{
public string QueryText = ""; //запрос

public SqlCeConnection conDb = new SqlCeConnection(
Properties.Settings.Default.SalaryDBConnectionString); //конекшн

public string TableName = ""; // таблица

public void SetQueryText(string CommandText)
{
QueryText = CommandText;
}

public void SetTableName(string newTableName)
{
TableName = newTableName;
}

public DataTable GetDataToTable()
{
SqlCeDataAdapter sqlAdapter = new SqlCeDataAdapter(QueryText, conDb);
DataTable data_table = new DataTable();
sqlAdapter.Fill(data_table);
return data_table;

}
}
}
ну и используюю его
GetDataFromDataBase FillGrid = new GetDataFromDataBase();
FillGrid.SetQueryText("SELECT office_id, office_name FROM office ORDER BY office_name");
FillGrid.SetTableName("ofs");
dataGvOffice.DataSource = FillGrid.GetDataToTable();
GetDataToTable - функция которая возвращает таблицу при использовании запроса SELECT.
Подскажите пожалуйста как написать функцию, которая работала бы с запросами INSERT INTO, DELETE и UPDATE ведь там не возвращается ничего

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 15.08.2012 14:48
Примерно так:
public void ExecuteNonQuery()
{
 SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
 cmd.ExecuteNonQuery();
}

public object ExecuteScalar()
{
 SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
 return cmd.ExecuteScalar();
}

[- к содержанию -]

Ответ #2 @roma_rio 16.08.2012 17:43
Спасибо, Алексей.
Но только студия подказала, что нужно конекшн открывать
Подскажите, как будет правильнее
public void ExecuteNonQuery()
        {
            SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
            using (conDb)
            {
                conDb.Open();
                cmd.ExecuteNonQuery();
            }
        }
или
public void ExecuteNonQuery()
        {
            SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
            
             conDb.Open();
             cmd.ExecuteNonQuery();
             conDb.Close();            
        }

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 16.08.2012 18:02
Я обычно использую вариант с using. Только у тебя он неверный, должно быть так:
public void ExecuteNonQuery()
    {
      using (SqlCeConnection conDb = new SqlCeConnection(Properties.Settings.Default.SalaryDBConnectionString))
      {
        conDb.Open();

         SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
        cmd.ExecuteNonQuery();

      }
    }
Второй вариант правильный. В using закрытие соединения происходит автоматически.

...Хотя, судя по твоему классу, переменная conDb - внешняя. Значит создавать повторное соединение не нужно. Тогда код будет примерно таким:
public void ExecuteNonQuery()
    {
      if(conDb.State == ConnectionState.Closed) conDb.Open();//если соединения нет, открываем

      SqlCeCommand cmd = new SqlCeCommand(QueryText, conDb);
       cmd.ExecuteNonQuery();
       //conDb.Close();  // в однопользовательском десктоп-приложении можно оставить открытым, чтобы не вновь открывать базу по десять раз
    }

Давным-давно в одной программке использовал SQL Compact, тоже делал хелпер-класс. Вот он:
class DataManager
{

  private string _ConnectionString = "";
  private SqlCeConnection _Conn = null;
  private string _DataPath = "";

  public string DataPath
  {
    set
    {
      _ConnectionString = String.Format("Data Source={0};Persist Security Info=False;", value);
      Init();
    }
  }

  public DataManager(string dataPath)
  {
    _DataPath = dataPath;
    _ConnectionString = String.Format("Data Source={0};Persist Security Info=False;", dataPath);
    Init();
  }

  private void Init()
  {
    if (_Conn == null)_Conn = new SqlCeConnection(_ConnectionString);
    if (_Conn.State == ConnectionState.Closed)
    {
      if (System.IO.File.Exists(_DataPath))
      {
        _Conn.Open();
      }
    }
  }

  public object ExecuteScalar(SqlCeCommand cmd)
  {
    Init();
    cmd.Connection = _Conn;
    return cmd.ExecuteScalar();
  }
  public long ExecuteScalarAsLong(SqlCeCommand cmd)
  {
    object result = ExecuteScalar(cmd);
    if (result == DBNull.Value || result == null) return 0;
    return Convert.ToInt64(ExecuteScalar(cmd));
  }
  public string ExecuteScalarAsString(SqlCeCommand cmd)
  {
    object result = ExecuteScalar(cmd);
    if (result == DBNull.Value || result == null || String.IsNullOrEmpty(result.ToString())) return String.Empty;
    return result.ToString();
  }

  public void ExecuteNonQuery(SqlCeCommand cmd)
  {
    Init();
    cmd.Connection = _Conn;
    cmd.ExecuteNonQuery();
  }

  public DataTable GetTable(SqlCeCommand cmd)
  {
    Init();
    cmd.Connection = _Conn;
    SqlCeDataAdapter DA = new SqlCeDataAdapter(cmd);
    DataTable DT = new DataTable();
    DA.Fill(DT);
    if (DT.Rows.Count <= 0) return null;
    return DT;
  }

  public DataRow GetRow(SqlCeCommand cmd)
  {
    DataTable DT = GetTable(cmd);
    if (DT == null || DT.Rows.Count <= 0) return null;
    return DT.Rows[0];
  }

  /// <summary>
  /// Закрывает соединение с БД
  /// </summary>
  public void Close()
  {
    if (_Conn != null && _Conn.State != ConnectionState.Closed) _Conn.Close();
  }

}
Соединение держится постоянно открытым. В классе основные методы:
GetTable - возвращает таблицу данных;
GetRow - возвращает строку данных;
ExecuteNonQuery - выполняет запрос и ничего не возвращает (например: DELETE, UPDATE);
ExecuteScalar - выполняет запрос и возвращает результат;
ExecuteScalarAsLong - хелпер-метод, выполняет запрос и возвращает число;
ExecuteScalarAsString - хелпер-метод, выполняет запрос и возвращает строку;
Close - закрывает соединение с БД.

[- к содержанию -]

Ответ #4 @roma_rio 16.08.2012 18:24
Ууу-ху-ху!
Полный фарш!

[- к содержанию -]

Добавить свой ответ в эту тему
Здравствуйте. Сразу прошу прощения за скорее всего неправильную терминология в изложении своих вопросов.
У меня создана небольшая БД(просто список данных"пользователей"), как визуализировать ее я понимаю,
но не знаю как мне редактировать поля и добовлять новые(не непосредственно открыв ее через обозреватель серверов, а именно через средства ASP), например, чтобы при заполнении формы регистрации данные поподали в базу данных.

У меня созданна модель для регистрации:
Код C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Web;
 
 
namespace MvcApplication3.Models
{
 public class RegistrationUser: IDataErrorInfo
 {
   public string Name { get; set; }
   public string LastName { get; set; }
   public string Nickname { get; set; }
   public string Email { get; set; }
   public string Sex { get; set; }
   public string Password { get; set; }
   public string PasswordConfirmation { get; set; }
   public string Error { get { return null; } }// здесь не использую пока 
 }
}

и ее представление:
Код HTML
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
 <title>RegistrationUser</title>
</head>
<body>
<h1>Registration</h1>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm())
 { %>
<p>Your Name: <%= Html.TextBox("Name")%></p>
<p>Your LastName: <%= Html.TextBox("LastName")%></p>
<p>Your Nickname: <%= Html.TextBox("Nickname")%></p>
<p>Your Email: <%= Html.TextBox("Email")%></p>
<p>Your Sex: <%= Html.TextBox("Sex")%></p>
<p>Your Password: <%= Html.TextBox("Password")%></p>
<p>Your PasswordConfirmation: <%= Html.TextBox("PasswordConfirmation")%></p>
<input type = "submit" value = "Submit Registration" />
<% } %>
</body>
</html>

[- к содержанию -]

Есть ТекстБокс.
Мы печатаем текст, нажимаем клавишу Enter... Нужно чтобы при нажатии на клавишу Enter эмулировался клик на Button1

[- к содержанию -]

Ответ #1 @Shark1 13.08.2012 14:57
Итак, на форме :

текстовое поле TextBox1 , кнопка Button1 ; далее для отображения сообщений : две текстовые метки - Label1 и Label2 , кнопка для удаления сообщений из текстовых меток Button2.

Далее код , думаю проще не бывает:

Public Class Form1

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' сообщение о том , что кнопка нажата
    Label2.Text = "Button1 is pressed"
  End Sub

  Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyValue = Keys.Enter Then  ' вот здесь и делаем проверку нажатия клавиши Enter
      Label1.Text = "You pressed the Enter key in TextBox1" ' сообщение о том что нажата клавиша Enter 
      Button1_Click(sender, e) ' перенаправляем событие к кнопке
    End If
  End Sub

  Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
    ' очищаем текстовые метки
    Label1.Text = String.Empty
    Label2.Text = String.Empty
  End Sub
End Class

[- к содержанию -]

Ответ #2 @aero122 13.08.2012 16:23
Спасибоооо)))
Сработало на этот раз. =)

[- к содержанию -]

Добавить свой ответ в эту тему
Import excel in vb2010 @rusiko 10.08.2012 14:51
Привет. Есть прога на Visual Basic 2010 в которой данные из datagrid импортируются в excel. Все идет нормально, только вот когда какая-то ячейка datagrid остается пустой, то при отображении данных в excel та ячейка которая должна быть пустой не отображается как пустая ячейка. То есть например есть ячейка ИМЯ, ФАМИЛИЯ, ТЕЛЕФОН и АДРЕС. Если в datagrid ячейку ТЕЛЕФОН оставить пустой, а все остальные наполнить, то при отображении в excel значение ячейки АДРЕС перемещается в ячейку ТЕЛЕФОН, а сама ячейка АДРЕС остается пустой. И так происходит со всеми пустыми ячейками. Спасибо заранее.

[- к содержанию -]

Все темы и обсуждения

Статьи по программированию

Обработка больших XML при помощи XmlReader

Работа с XML/XSL: C# @Алексей Немиро 13.08.2012 21:21
В .NET Framework есть несколько основных классов для работы с XML. Большинство классов высокоуровневые и позволяют довольно легко обрабатывать XML-данные. Однако, если данных много, в приложении могут возникнуть проблемы с потреблением оперативной памяти. В этой статье рассмотрен метод чтения большого XML-файла при помощи класса XmlReader на языке C#.

Читать полностью

[- к содержанию -]

Все статьи по программированию

Вакансии в IT

РНР-программист сервисов для SEO

Россия, Нижний Новгород | Работа в офисе | 50 000.00 KBP

Программист (Visual C++, Trolltech Qt)

Россия, Казань | Работа в офисе | 25 000.00 KBP

Разработчик информационных систем

Россия, Ростов-на-Дону | Работа в офисе | 28 000.00 KBP

Delphi программист

Россия, Ростов-на-Дону | Работа в офисе | 12 000.00 KBP

Веб дизайнер

Россия, Нижний Новгород | Работа в офисе

SEO-специалист

Россия, Нижний Новгород | Работа в офисе | 16 000.00 KBP

Инженер-программист

Россия, Йошкар-Ола | Работа в офисе | 30 000.00 KBP

Программист C++

Россия, Новосибирск | Работа в офисе

Инженер разработчик цифровой аппаратуры

Россия, Ростов-на-Дону | Работа в офисе | 45 000.00 KBP

Web дизайнер

Россия, Ростов-на-Дону | Работа в офисе | 10 000.00 KBP

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Новый планшет Microsoft может стоить 199 долларов

По информации интернет-издания Engadget, интернет-планшет Microsoft Surface начнет продаваться на открытом рынке с 26 октября - день в день с выходом семейства новых Windows, а стоить он будет в США всего 199 долларов. Отметим, что за 199 долларов Surface станет самым дешевым 10-дюймовым планшетом на рынке с 32 гигабайтами памяти. Отдельно от планшета будет продаваться "пристегиваемая" клавиатура (она же защитная обложка для экрана) Touсh Cover.

Engadget отмечает, что при цене в 199 долларов Microsoft будет продавать Surface ниже себестоимости и каждый проданный гаджет будет для компании убыточным. Впрочем, Engadget замечает, что его информация получена из предварительных расценок и до релиза планшета цена еще может быть пересмотрена. 

Эксперты говорят, что для самой Microsoft есть несколько моментов, почему не стоит продавать планшет так дешево. Даже если откинуть то обстоятельство, что сама корпорация будет нести убытки на продажах, подобный ценовой демпинг вряд ли порадует конкурентов корпорации на планшетном рынке. К таковым можно отнести многие известные компьютерные бренды, такие как Dell, Asus, Acer и другие. Нет сомнений, что партнеры Microsoft не простят корпорации такой жесткий ценовой демпинг и накажут ее на софтверном рынке за такое вольнодействие.

Аналитики говорят, что теоретически Microsoft смогла бы продавать Surface за 199 долларов, но это вовсе не означает, что она будет это делать. На аппаратном рынке компания не является новичком, но все ее прежние хардварные инициативы по большей части проваливались, поэтому выходить на планшетный рынок было бы логично небольшими шагами, а не вваливаться, расталкивая локтями местных старожилов.

Не так давно гендиректор тайваньской Acer Джей Ти Вонг заявил, что ценовой демпинг со стороны Microsoft будет иметь "значительные последствия" как для рынка, так и для Microsoft. Вонг также намекнул, что в случае давления на планшетном рынке со стороны Microsoft другие игроки рынка могут и вовсе отказаться от выпуска WindowsRT-продуктов, перейдя в стан Android.

В свою очередь основатель компании Acer Стен Ши полагает, что Цель нового интернет-планшета Microsoft - показать остальным производителям, что на базе операционной системы Windows 8 следует выпускать оборудование. Выпустив планшет Surface, корпорация надеется перетянуть часть внимания производителей устройств на себя и Windows 8, а когда компании начнут выпускать Windows8-планшеты и конкурировать между собой, то Microsoft тихо уйдет с планшетного рынка и сосредоточится на программном обеспечении.

"Нужно понимать, что сама Microsoft не собирается в долгосрочной перспективе продавать свои планшеты. После того, как заявленная цель будет реализована, Microsoft больше не будет предлагать новых моделей Surface", - говорит Ши.

По его словам, данная стратегия была задумана корпорацией, как способ "спровоцировать" производителей устройств выпускать планшеты на Windows 8. "Самой Microsoft нет никакого резона продавать аппаратное обеспечение, так как оно менее прибыльно, конкуренция на рынке очень высока, а опыта в данном направлении у компании нет", - говорит Ши. Кроме того глава Acer говорит, что подробно изучал стратегию долговременного развития Microsoft и в ней нет ничего, что говорило бы о важности аппаратных продуктов.

Ши говорит, что за несколько лет Apple получила опыт в производстве iPad, а над Android-планшетами сейчас работают десятки компаний, поэтому выход на планшетный рынок Microsoft с полным отсутствием соответствующего опыта - это "чистой воды провокация".

16.08.2012 10:18 · Категория: Железо · Источник: CyberSecurity.ru

[- к содержанию -]

Инвесткомпания Баффета избавилась от всех акций Intel

Компания Berkshire Hathaway миллиардера Уоррена Баффета заявила о продаже всех акций корпорации Intel, крупнейшего производителя микропроцессоров в мире. Баффет продал 7,7 миллиона акций компании или около 0,14 процента от ее капитала. Одновременно Berkshire добавила к своему портфелю доли в двух нефтяных компаниях.

16.08.2012 10:16 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Мэрия проследит за москвичами по сигналу мобильных телефонов

Власти Москвы намерены к декабрю приступить к сбору данных о передвижениях жителей через сигнал их мобильных телефонов. Цель такой слежки - создание модели транспортных потоков и их оптимизация. Юристы сотовых компаний должны оценить, законна ли такая процедура и не завалят ли их исками о разглашении частных сведений.

16.08.2012 10:15 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

Начался прием заказов на мини-принтеры для iPhone

Лондонская студия Berg начала прием заказов на мобильный принтер, позволяющий распечатать содержимое сайта на узкой бумажной ленте. Стоимость устройства, получившего название Little Printer, составляет 199 фунтов стерлингов (почти 10 тысяч рублей). Отправить задание на печать можно со смартфона.

15.08.2012 08:41 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Apps4Russia - Конкурс для ответственных разработчиков

Apps4RussiaНекоммерческое партнерство «Информационная Культура» представляет Apps4Russia — открытый конкурс инновационных гражданских проектов в сфере Web-разработок.

 

Цели Конкурса: способствовать повышению уровня прозрачности, развивать социально важные проекты и гражданские инициативы.

 

«Наша задача, привлечение внимания и поиск энтузиастов в сфере эффективного использования информации во имя прогресса общества и качества жизни. Поддержка государства в повышении доступности и прозрачности информации. Мы хотим создать возможности для отбора и запуска наиболее интересных и эффективных проектов, основанных на использовании открытых данных. Привлечь российских разработчиков перспективных мобильных приложений и веб-проектов».

 

Наша миссия:

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


Общий призовой фонд составляет 400,000 рублей и распределяется между победителями номинаций. Финал конкурса состоится в декабре 2012 года. Завершающие мероприятия станут площадкой для встреч и проведения переговоров (между потенциальными партнёрами): разработчиками проектов, инвесторами.

 

Официальный сайт конкурса: www.apps4russia.ru

 

Подать заявку на участие

14.08.2012 11:44 · Категория: Программирование · Источник: Kbyte.Ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное