Посвятить себя SQLite после вставки рядаC#

Место общения программистов C#
Ответить
Anonymous
 Посвятить себя SQLite после вставки ряда

Сообщение 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.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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»