Здравствуйте!
Помогите с советом: есть ли возможность проверки выполняемости SQL запроса на удаление с помощью ADO connection в C#? Вот кусок кода метода для проверки выполняемости SQL-запроса:
public int ExecuteCheck(string sqlstr)
{
object obj1;
ADODB.Connection con = new ADODB.Connection();
con.ConnectionString = cnStr;
con.Open(null, null, null, 0);
+ con.Execute(sqlstr, out obj1, 0);
con.Close();
return 1;
}
Например, sqlstr="DELETE FROM test WHERE id=100". В строке, обозначенной знаком "+", выполняется данный SQL-запрос. Так вот, мне надо, если данный запрос невозможно выполнить (отсутствует строка с данным условием), то выдавало какое-нибудь предупреждение или ошибку.
Возможно такое реализовать?
Проверка выполняемости SQL запроса через ADO connection в C#
Автор batyrLAN, 26.07.2011, 21:02
#2
Отправлено 26.07.2011, 22:23:36
почему невозможно выполнить? возможно. только не удалится ничего, потому как нечего удалять. ругаться/падать по причине отсутствия удаляемой записи не должно.
если хочется, можно потом посмотреть сколько удалилось. если мне не изменяет склероз (давно это было), в адо это делается через задницу - там у объекта коннекта к базе есть события, их можно ловить, и количество затронутых запросом строк приходит с событием завершения выполнения запроса. редкостный идиотизм, на мой взгляд.
другой вопрос, кому и зачем нужно на дотнетовском цешарпе юзать допотопные активыксовские адо? в адонете все гораздо проще, там у команды метод выполнения невыбирающего запроса сразу возвращает количество задетых строк.
если хочется, можно потом посмотреть сколько удалилось. если мне не изменяет склероз (давно это было), в адо это делается через задницу - там у объекта коннекта к базе есть события, их можно ловить, и количество затронутых запросом строк приходит с событием завершения выполнения запроса. редкостный идиотизм, на мой взгляд.
другой вопрос, кому и зачем нужно на дотнетовском цешарпе юзать допотопные активыксовские адо? в адонете все гораздо проще, там у команды метод выполнения невыбирающего запроса сразу возвращает количество задетых строк.
#4
Отправлено 27.07.2011, 20:41:26
сначала нужно научиться искать по интернету
самый лучший советчик в области микрософта это MSDN
например здесь про адо.нет http://msdn.microsof...y/e80y5yhx.aspx
а насчет удаления вариантов много
1. лучше использовать хранимую процедуру
2. можешь перед удалением проверить существование этой строчки (с помощью count или if exists)
3. можешь использовать @@ROWCOUNT
4. можешь поизвращаться тригерами на удаление
вопщем вариантов много
самый лучший советчик в области микрософта это MSDN
например здесь про адо.нет http://msdn.microsof...y/e80y5yhx.aspx
а насчет удаления вариантов много
1. лучше использовать хранимую процедуру
2. можешь перед удалением проверить существование этой строчки (с помощью count или if exists)
3. можешь использовать @@ROWCOUNT
4. можешь поизвращаться тригерами на удаление
вопщем вариантов много
#6
Отправлено 29.07.2011, 10:16:20
изучать надо не советы. а докиОткуда мне стоит начать изучать ваш совет?
http://msdn.microsof...023(VS.85).aspx
в частности назначение RecordsAffected
#7
Отправлено 31.07.2011, 06:57:02
Если ты работаешь с MSSQL можно так:
try
{
conn.Execute("SET SHOWPLAN_TEXT ON");
conn.Execute("DELETE FROM test WHERE id=100");
}
finally
{
conn.Execute("SET SHOWPLAN_TEXT OFF");
}
В этом случае SQL Server вместо выполнения команды DELETE будет возвращать план выполнения запроса. И если в тексте запросе есть ошибки, сгенерит исключение.
try
{
conn.Execute("SET SHOWPLAN_TEXT ON");
conn.Execute("DELETE FROM test WHERE id=100");
}
finally
{
conn.Execute("SET SHOWPLAN_TEXT OFF");
}
В этом случае SQL Server вместо выполнения команды DELETE будет возвращать план выполнения запроса. И если в тексте запросе есть ошибки, сгенерит исключение.
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0