Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Подключение к ДБ на C##

Автор: fvgrod
Дата сообщения: 01.02.2008 23:29
Добрый ден, прописываю код, а он мне в ответ выдает:
"После EXECUTE ожидается имя запроса"
Подскажите куда копать(((

OleDbCommand myCommand = new OleDbCommand("SELECT * FROM [table]", oleDbConnection);
try
{
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();

}
catch (OleDbException ex)
{
MessageBox.Show(ex.ToString());
}
Автор: EZH
Дата сообщения: 01.02.2008 23:45
fvgrod
А с какого перепугу CommandType.StoredProcedure, если в команде пишется SELECT запрос?
И почему ExecuteNonQuery, когда идет выборка ВСЕГО из таблицы?
Автор: fvgrod
Дата сообщения: 02.02.2008 00:34
Подскажи пожалуйста когда используеться ExecuteNonQuery и какую команду в данном случае надо использовать.
CommandType.StoredProcedure - понял.
Автор: EZH
Дата сообщения: 02.02.2008 00:47
ExecuteNonQuery используют когда не ожидают получить результат какого-либо запроса. Для твоего же SELECT запроса нужно скорее ExecuteReader, чтобы прочитать в цикле последовательно все вернутые записи. CommandType тут надо Text.
Автор: fvgrod
Дата сообщения: 02.02.2008 11:14
Спасибо, с этим разобрался.
Подскажите, а как полученный селект отобразить к примеру в label.text?

Получил:

myCommand.CommandText = "SELECT MAX(ID) FROM [table]";
try
{

myCommand.Connection.Open();
myCommand.ExecuteReader();
myCommand.Connection.Close();

}
Автор: EZH
Дата сообщения: 02.02.2008 12:42
Вот пример из MSDN:

public void ReadData(string connectionString, string queryString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(queryString, connection);

connection.Open();
OleDbDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
reader.Close();
}
}

Автор: eLLoco
Дата сообщения: 02.02.2008 12:47
fvgrod
удобно пользовать

Код: reader["ИмяПоляИзТаблицы"]
Автор: EZH
Дата сообщения: 02.02.2008 12:58
eLLoco
Если уж говорить об удобстве и эффективности, то надо при цикличной обработке ридера вообще так писать:

    if (reader.Read())
    {
        Int32 iA = drBase.GetOrdinal("ИмяStringПоляAИзТаблицы");
        Int32 iB = drBase.GetOrdinal("ИмяInt32ПоляBИзТаблицы");
        do
        {
            String A = reader.GetString(iA);
            Int32 B = reader.GetInt32(iB);
        } while (reader.Read());
    }

Доступ по индексу всегда быстрее, чем каждый раз в цикле по имени поля.
Автор: fvgrod
Дата сообщения: 03.02.2008 14:05
Спасибо больше... помогло.

Подскажите пожалуйста еще один вопросик:
Создаю запрос
myCommand.CommandText = "DELETE FROM [table] WHERE ID = " + id.Text + ";";

Подскажите как создать проверку перед удалением на наличие строчки с данным параметром?
Автор: EZH
Дата сообщения: 03.02.2008 14:19
fvgrod
А смысл делать такую проверку? Если нет такой записи, то DELETE не должен на это ругаться, просто ничего не удалит.

Кроме того - плохая практика делать такую склейку строк для SQL. Делай через myCommand.Parameters.Add...
Автор: eLLoco
Дата сообщения: 03.02.2008 20:59
fvgrod

смысла в этом и правда немного, возможно тебе нужно проверять число удаленных в результате записей (affected rows)?
Автор: fvgrod
Дата сообщения: 04.02.2008 20:07
Спасибо.
Все верно, мне нужно выдавать колличество удаленных строчек.

С этим разобрался))

Страницы: 1

Предыдущая тема: Помогите с исходником для DisksInfo.cpp


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.