powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятная ошибка
8 сообщений из 8, страница 1 из 1
Непонятная ошибка
    #32936362
New_member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда выводил информацию из ActiveDirectory все работало. Переношу информацию из AD в SQL следующим образом:
private void Form1_Load(object sender, System.EventArgs e)
{
System.DirectoryServices.SearchResultCollection searchresult=searcherPC.FindAll();
foreach(SearchResult searchres in searchresult)
{
sqlConnection.Open();
this.sqlCommand.CommandText = "INSERT INTO dan_user(FullName, Email, Telephon, LoginName) VALUES (@fullname, @email, @telephon, @loginname)";
this.sqlCommand.Parameters.Add("@fullname",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@email",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@telephon",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@loginname",SqlDbType.VarChar);
this.sqlCommand.Parameters["@fullname"].Value = searchres.GetDirectoryEntry().Properties["cn"].Value.ToString();
this.sqlCommand.Parameters["@email"].Value = searchres.GetDirectoryEntry().Properties["mail"].Value.ToString();
this.sqlCommand.Parameters["@telephon"].Value = searchres.GetDirectoryEntry().Properties["telephoneNumber"].Value.ToString();
this.sqlCommand.Parameters["@loginname"].Value = searchres.GetDirectoryEntry().Properties["SamAccountName"].Value.ToString();
this.sqlCommand.Connection = this.sqlConnection;
this.sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
}
Выдает ошибку:
"An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll
Additional information: System error."
Подскажите, в чем проблема?
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936454
Фотография Sam Andrews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй указывать длину поля varchar при добавлении параметров...

с уважением...
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936491
New_member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Длину поля не имеет значения указывать.
Я не уточнил - одну запись в SQL переносит, а на остальных выдает такую ошибку.
try/catch ничем не помогает
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936521
Фотография Sam Andrews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а существует ли объект sqlConnection при втором проходе..?


с уважением...
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936636
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы вообще вынес операции открытия/закрытия соединения и создание параметров команды вне цикла. А внутри цикла только заполнение параметров значениями и выполнение команды.
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936895
Фотография Sam Andrews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо надо смотреть на поля таблицы, как там с нулами, уникальными констрейнами и т.д., раз первая запись попадает в базу, а остальные нет...

ЗЫ: относительно моего замечания по connection, такой вот вопрос:
когда он закрывается после первого прохода по циклу, не будет ли объект собран коллектором, или GC в эти моменты "спит".., и обратит на него внимание после выхода из цикла..?

хотя ошибка, конечно, не в этом...


с уважением...
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936941
Melo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень плохой код :(

Уберите из цикла открытие/закрытие соединения с базой и, самое главное, добавление параметров в команду. На кой черт это делать в цикле, ведь там нет зависимости от итерации цикла? После этого у вас все заработает.

Ну или, на худой конец, добавьте
Код: plaintext
this.sqlCommand.Parameters.Clear();
в начале каждой итерации цикла.

Почему не работало раньше? На первом проходе цикла вы добавляете в команду параметры (к примеру "@fullname"). На втором проходе цикла вы опять добавляете этот самый "@fullname" и так далее. Коллекция параметров команды может содержать несколько параметров с одним и тем же именем! В результате возникает ошибка при выполнении запроса, поскольку у вас число параметров команды не соответствует числу параметров в тексте запроса.
...
Рейтинг: 0 / 0
Непонятная ошибка
    #32936946
Melo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
sqlConnection.Open();
this.sqlCommand.CommandText = "INSERT INTO dan_user(FullName, Email, Telephon, LoginName) VALUES (@fullname, @email, @telephon, @loginname)";
this.sqlCommand.Parameters.Add("@fullname",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@email",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@telephon",SqlDbType.VarChar);
this.sqlCommand.Parameters.Add("@loginname",SqlDbType.VarChar);
this.sqlCommand.Connection = this.sqlConnection;
foreach(SearchResult searchres in searchresult)
{
this.sqlCommand.Parameters["@fullname"].Value = searchres.GetDirectoryEntry().Properties["cn"].Value.ToString();
this.sqlCommand.Parameters["@email"].Value = searchres.GetDirectoryEntry().Properties["mail"].Value.ToString();
this.sqlCommand.Parameters["@telephon"].Value = searchres.GetDirectoryEntry().Properties["telephoneNumber"].Value.ToString();
this.sqlCommand.Parameters["@loginname"].Value = searchres.GetDirectoryEntry().Properties["SamAccountName"].Value.ToString();
this.sqlCommand.ExecuteNonQuery();
}
sqlConnection.Close();
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятная ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]