Строка идентификатора Datarow не соответствует строке идентификатора объекта, даже если после проверки отладки они являются идентичными - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь найти список строк идентификаторов в моей базе данных, где строка идентификаторов совпадает со строкой объекта, который я пытаюсь создать.Идентификатор, который создается, находится в шаблоне проектирования завода, где тип поезда "экспресс" сделан с идентификатором "1E45".После создания этого идентификатора он увеличивает числовой раздел после буквы, после чего его можно использовать для добавления следующего поезда.

При поиске в списке с помощью foreach он возвращает идентификатор из базы данных, аналогичнойтому, кто пытается быть сотворенным.

Но когда я пытаюсь сопоставить эти два после использования toString, чтобы изменить их оба и сопоставить в IF.Совпадение возвращает false, хотя, когда я проверяю отладку, оно точно такое же?

Затем он просто продолжает пытаться добавить новый объект с тем идентификатором, который уже существует и дает сбой.

Что я делаю не так?это не имеет смысла после проверки сопоставляемых значений и сообщения false.

Вот код, который я настроил:

//Create sql command variables to create new commands
SqlCommand insert = new SqlCommand();
SqlCommand checkID = new SqlCommand();

//Set the command type to text
insert.CommandType = CommandType.Text;
checkID.CommandType = CommandType.Text;

//Searches for an ID in the database that matches one that is trying to be created
checkID.CommandText = "SELECT id FROM Train WHERE id = @trainID";

//Parameters for checking ID in database
checkID.Parameters.AddWithValue("@trainID", train.TrainID);

//Set the connection for the command for the checkID sql connection
checkID.Connection = con;

//Start the connection
con.Open();

DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(checkID);

adapter.Fill(dt);

dt.Load(checkID.ExecuteReader());

//Item last = Module.
foreach (DataRow i in dt.Rows)
{
    if (i.ToString() == train.TrainID.ToString())
    {
        MessageBox.Show("This ID already exists! " + train.TrainID);
        return;
    }
}

//Close the connection
con.Close();



//Set the text for the command to insert data to the database connected to
insert.CommandText = "INSERT Train (id, departure, destination, type, intermediate, departure_time, departure_date, sleeperBerth, firstClass) " +
                    "VALUES ( @trainID , @departure, @destination, @type, @intermediate, @dep_time, @dep_date, @sleep, @first)";

//Parameters for adding values from the train object to the database
insert.Parameters.AddWithValue("@trainID", train.TrainID);
insert.Parameters.AddWithValue("@departure", train.Departure);
insert.Parameters.AddWithValue("@destination", train.Destination);
insert.Parameters.AddWithValue("@type", train.Type);
insert.Parameters.AddWithValue("@intermediate", intStops);
insert.Parameters.AddWithValue("@dep_time", train.DepartureTime);
insert.Parameters.AddWithValue("@dep_date", train.DepartureDay);
insert.Parameters.AddWithValue("@sleep", train.SleeperBerth);
insert.Parameters.AddWithValue("@first", train.FirstClass);

//Set the connection for the command for the insert sql connection
insert.Connection = con;

//Start the connection
con.Open();

//Execute the command specified
insert.ExecuteNonQuery();

//Close the connection
con.Close();

1 Ответ

0 голосов
/ 25 ноября 2018

Похоже, вам нужно изменить столбец id в таблице train на столбец IDENTITY и позволить базе данных обработать присвоение идентификатора:

ALTER TABLE dbo.Train ALTER COLUMN id int IDENTITY(1,1); --data type guessed

Затем в вашем приложениивам не нужно ни генерировать значение для ID, ни объявлять его в вашем операторе INSERT (либо в списке столбцов до INSERT в, либо в вашем предложении VALUES).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...