Я пишу свое первое приложение C# Windows Form, которое я буду использовать для личного использования. Это приложение для утилиты для моего хобби астрофотографии. Мне пришлось восстановить свой код несколько раз из репозитория только потому, что я так много испортил. SQLite DB был довольно избит, и я думаю, что могу испортить индексы. Я могу восстановить его, нет никаких данных, которые я не могу воссоздать. Это код, который я использую, чтобы увидеть, не записал ли я цель, над которой я работаю в приложении .. < /p>
string connectionString = "Data Source=..\\..\\Astrophotography DataBase\\Astrophotography.db;Version=3;";
public bool QueryATI(string strTargetName, string[] arrEquipment)
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
bool result = false;
SQLiteCommand command =
new SQLiteCommand("SELECT ATI_TargetName, ATI_Telescope_Lens_Used FROM Astro_Target_Imaged WHERE ATI_TargetName = @Target", conn);
command.Parameters.Add(new SQLiteParameter("@Target", strTargetName));
using (SQLiteDataReader TargetReader = command.ExecuteReader())
{
int i = 0;
if (TargetReader.HasRows)
{
// It is very possible a target has been imaged more than once with different
// equipment or focal lengths. This checks to see what has been recorded of
// any of them, and if this one is not recorded. It will be added.
{
string strTelescope = TargetReader["ATI_Telescope_Lens_Used"].ToString();
string strArrayValue = arrEquipment.ToString();
if (strTelescope == arrEquipment)
{
result = true;
conn.Clone();
return result;
}
i++;
}
}
result = false;
conn.Clone();
return result;
}
result = false;
conn.Clone();
return result;
}
}
< /code>
Если я обнаружил, что цель еще не хранилась в DB, я затем вставляю его, используя код ниже. < /p>
public void BuildATI(string strTargetName, string strMount, string strICamera, string strTelescope, string strFilter, string strGuidCamera, string strGuideScope)
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
bool result = false;
string strInsert = ("INSERT INTO Astro_Target_Imaged");
string strColumns = "(ATI_TargetName, ATI_Mount_Used, ATI_Image_Camera, ATI_Telescope_Lens_Used, ATI_Filter, ATI_Guide_Camera, ATI_Guide_Scope_Used)";
string strValues = "VALUES (@Target, @Mount, @ICamera, @Telescope, @Filter, @GCamera, @GScope)";
string strQuery = strInsert + strColumns + strValues;
SQLiteCommand command =
new SQLiteCommand(strQuery, conn);
command.Parameters.Add(new SQLiteParameter("@Target", strTargetName));
command.Parameters.Add(new SQLiteParameter("@Mount", strMount));
command.Parameters.Add(new SQLiteParameter("@ICamera", strICamera));
command.Parameters.Add(new SQLiteParameter("@Telescope", strTelescope));
command.Parameters.Add(new SQLiteParameter("@Filter", strFilter));
command.Parameters.Add(new SQLiteParameter("@GCamera", strGuidCamera));
command.Parameters.Add(new SQLiteParameter("@GScope", strGuideScope));
//.FirstOrDefault();
try
{
command.ExecuteNonQuery();
//conn.Commit();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
conn.Clone();
}
}
}
< /code>
Моя проблема заключается в том, что по какой -либо причине после того, как я выполняю вставку, которую я прошел в отладке и не получил ошибок. Вставка не бросает никаких исключений. Но когда я делаю запрос против него в Sqlitestudio, я этого не вижу. Итак, затем я повторяю те же данные, через которые проходит тот же контрольный код, где заявление if гласит, что у него есть строки. Но затем, когда я пытаюсь получить доступ к столбцу в таблице. Это бросает исключение, ряды не найдены. Вот почему я думаю, что я разбил DB. < /P>
Итак, мой вопрос: в настоящее время у меня нет заявления о коммите в коде после оператора вставки. На всех других типах БД, который я когда -либо использовал (Oracle, MySQL, SQL Server), который вы всегда совершаете. Когда я использую SQLiteStudio, я должен совершать коммиты. Какова одна из причин, по которой я думаю, я разучил индексы. И что такое синтаксис для коммита против SQLite?
Подробнее здесь: https://stackoverflow.com/questions/773 ... ting-a-row
Посвятить себя SQLite после вставки ряда ⇐ C#
Место общения программистов C#
1753777155
Anonymous
Я пишу свое первое приложение C# Windows Form, которое я буду использовать для личного использования. Это приложение для утилиты для моего хобби астрофотографии. Мне пришлось восстановить свой код несколько раз из репозитория только потому, что я так много испортил. SQLite DB был довольно избит, и я думаю, что могу испортить индексы. Я могу восстановить его, нет никаких данных, которые я не могу воссоздать. Это код, который я использую, чтобы увидеть, не записал ли я цель, над которой я работаю в приложении .. < /p>
string connectionString = "Data Source=..\\..\\Astrophotography DataBase\\Astrophotography.db;Version=3;";
public bool QueryATI(string strTargetName, string[] arrEquipment)
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
bool result = false;
SQLiteCommand command =
new SQLiteCommand("SELECT ATI_TargetName, ATI_Telescope_Lens_Used FROM Astro_Target_Imaged WHERE ATI_TargetName = @Target", conn);
command.Parameters.Add(new SQLiteParameter("@Target", strTargetName));
using (SQLiteDataReader TargetReader = command.ExecuteReader())
{
int i = 0;
if (TargetReader.HasRows)
{
// It is very possible a target has been imaged more than once with different
// equipment or focal lengths. This checks to see what has been recorded of
// any of them, and if this one is not recorded. It will be added.
{
string strTelescope = TargetReader["ATI_Telescope_Lens_Used"].ToString();
string strArrayValue = arrEquipment[i].ToString();
if (strTelescope == arrEquipment[i])
{
result = true;
conn.Clone();
return result;
}
i++;
}
}
result = false;
conn.Clone();
return result;
}
result = false;
conn.Clone();
return result;
}
}
< /code>
Если я обнаружил, что цель еще не хранилась в DB, я затем вставляю его, используя код ниже. < /p>
public void BuildATI(string strTargetName, string strMount, string strICamera, string strTelescope, string strFilter, string strGuidCamera, string strGuideScope)
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
bool result = false;
string strInsert = ("INSERT INTO Astro_Target_Imaged");
string strColumns = "(ATI_TargetName, ATI_Mount_Used, ATI_Image_Camera, ATI_Telescope_Lens_Used, ATI_Filter, ATI_Guide_Camera, ATI_Guide_Scope_Used)";
string strValues = "VALUES (@Target, @Mount, @ICamera, @Telescope, @Filter, @GCamera, @GScope)";
string strQuery = strInsert + strColumns + strValues;
SQLiteCommand command =
new SQLiteCommand(strQuery, conn);
command.Parameters.Add(new SQLiteParameter("@Target", strTargetName));
command.Parameters.Add(new SQLiteParameter("@Mount", strMount));
command.Parameters.Add(new SQLiteParameter("@ICamera", strICamera));
command.Parameters.Add(new SQLiteParameter("@Telescope", strTelescope));
command.Parameters.Add(new SQLiteParameter("@Filter", strFilter));
command.Parameters.Add(new SQLiteParameter("@GCamera", strGuidCamera));
command.Parameters.Add(new SQLiteParameter("@GScope", strGuideScope));
//.FirstOrDefault();
try
{
command.ExecuteNonQuery();
//conn.Commit();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
conn.Clone();
}
}
}
< /code>
Моя проблема заключается в том, что по какой -либо причине после того, как я выполняю вставку, которую я прошел в отладке и не получил ошибок. Вставка не бросает никаких исключений. Но когда я делаю запрос против него в Sqlitestudio, я этого не вижу. Итак, затем я повторяю те же данные, через которые проходит тот же контрольный код, где заявление if гласит, что у него есть строки. Но затем, когда я пытаюсь получить доступ к столбцу в таблице. Это бросает исключение, ряды не найдены. Вот почему я думаю, что я разбил DB. < /P>
Итак, мой вопрос: в настоящее время у меня нет заявления о коммите в коде после оператора вставки. На всех других типах БД, который я когда -либо использовал (Oracle, MySQL, SQL Server), который вы всегда совершаете. Когда я использую SQLiteStudio, я должен совершать коммиты. Какова одна из причин, по которой я думаю, я разучил индексы. И что такое синтаксис для коммита против SQLite?
Подробнее здесь: [url]https://stackoverflow.com/questions/77393038/commit-to-sqlite-after-inserting-a-row[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия