Помогите подправить снипет C#

mrgreyarbtr

Пользователь
Регистрация
01.10.2022
Сообщения
99
Благодарностей
30
Баллы
18
Доброго, форум. :-)

C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer){
    for (int i = 0; i < 10; i++) {
    string acs = project.Lists["acounts"][0].Trim();
    project.Lists["account"].RemoveAt(0);
    db.query("INSERT INTO accounts SET keyword='"+acs+"'");
    }
}

db.close();
Хочу с списка перенести значения в таблицу, но получаю такой ответ:

Выполнение действия CSharp OwnCode. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Кто подскажет как подправить? чтобы он работал?преблагодарствую.
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
545
Благодарностей
1 124
Баллы
93
Доброго, форум. :-)

C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer){
    for (int i = 0; i < 10; i++) {
    string acs = project.Lists["acounts"][0].Trim();
    project.Lists["account"].RemoveAt(0);
    db.query("INSERT INTO accounts SET keyword='"+acs+"'");
    }
}

db.close();
Хочу с списка перенести значения в таблицу, но получаю такой ответ:

Выполнение действия CSharp OwnCode. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Кто подскажет как подправить? чтобы он работал?преблагодарствую.
Привет. Вероятно, так, но это не точно:

C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer)
{
    for (int i = 0; i < project.Lists["acounts"].Count; i++)
    {
        string acs = project.Lists["acounts"][0].Trim();
        project.Lists["account"].RemoveAt(0);
        db.query("INSERT INTO accounts SET keyword='"+acs+"'");
    }
}

db.close();
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Вероятно, так будет несколько правильнее
C#:
int count = 10;//тут задаю размер пачки
var list = project.Lists["accounts"];//это список с аккаунтами
lock(Syncobjects.ListSyncer){
    count = list.Count > count ? count : list.Count;//если в списке меньше, чем указано, то добавится столько, сколько есть
    if(count>0){//если список пустой, то и добавлять ничего
        db.open();//лишь здесь стоит открывать соединение, вдруг список окажется пустым
        db.query(string.Join("\n",list.GetItems($"0-{count}", true).Select(x=>$"INSERT INTO accounts SET keyword='{x.Trim()}';")));
        db.close();
    }
}
 

nexx1

Client
Регистрация
16.08.2016
Сообщения
277
Благодарностей
97
Баллы
28
C#:
var db = project.Context["db"];

try {
    // Lock the table using a method provided by the database driver or ORM
    db.lockTable("acc_invest");
} catch (Exception ex) {
    // Log the error message
    Console.WriteLine("Failed to lock table: " + ex.Message);
}

try {
    lock(SyncObjects.ListSyncer) {
        for (int i = 0; i < 10; i++) {
            string acs = project.Lists["acounts"][0].Trim();
            project.Lists["account"].RemoveAt(0);
            // Use parameterized queries or prepared statements to insert values into the SQL query
            db.query("INSERT INTO accounts SET keyword=@keyword", new { keyword = acs });
        }
    }
} catch (Exception ex) {
    // Log the error message
    Console.WriteLine("Failed to insert accounts: " + ex.Message);
} finally {
    // Unlock the table
    db.unlockTable();
}

db.close();
 
  • Спасибо
Реакции: Sho

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
66
Баллы
28
Доброго, форум. :-)

C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer){
    for (int i = 0; i < 10; i++) {
    string acs = project.Lists["acounts"][0].Trim();
    project.Lists["account"].RemoveAt(0);
    db.query("INSERT INTO accounts SET keyword='"+acs+"'");
    }
}

db.close();
Хочу с списка перенести значения в таблицу, но получаю такой ответ:

Выполнение действия CSharp OwnCode. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Кто подскажет как подправить? чтобы он работал?преблагодарствую.

C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer){
    for (int i = project.Lists["acounts"].Count() - 1; i > project.Lists["acounts"].Count(); i--) {
        string acs = project.Lists["acounts"][i].Trim();
        project.Lists["account"].RemoveAt(i);
        db.query("INSERT INTO accounts SET keyword='"+acs+"'");
    }
}

db.close();
Либо чуть меньше кода
C#:
var db = project.Context["db"];

db.query("LOCK TABLES acc_invest WRITE");

lock(SyncObjects.ListSyncer){
    for (int i = project.Lists["acounts"].Count() - 1; i > project.Lists["acounts"].Count(); i--) {       
        db.query("INSERT INTO accounts SET keyword='"+project.Lists["acounts"][i].Trim()+"'");
        project.Lists["account"].RemoveAt(i);
    }
}

db.close();
 
  • Спасибо
Реакции: mrgreyarbtr

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)