Этот код я использовал раньше. Он работает так, как задумано. Я заполняю поля и проверяю некоторые элементы в DataGridView, который использую в качестве флажка, и успешно ввожу их оба в родительскую и дочернюю таблицы. Если я проверю 3 элемента, то 3 записи добавляются в таблицу «Транзакции» и 1 запись в таблицу «Клиенты».
private void Button1_Click(object sender, EventArgs e)
{
DataTable CheckedItemsDataTable = e.selectCheckedItems();
string StaffinCharge = staffComboBox.SelectedValue.ToString();
string retrievedStaffID = Convert.ToString(s.getIdfromName(StaffinCharge));
bool Selection;
bool transactionInsertbool;
bool customerInsertbool;
int SuccessCounter = 0;
int FailureCounter = 0;
int CheckCounter = CheckBoxCache();
//Get the value from the input fields.
c.Id = cIdTextBox.Text;
c.Name = nameTextBox.Text;
c.Sex = genderComboBox.Text;
c.Address = addressTextBox.Text;
c.MaritalStatus = maritalstatusComboBox.Text;
c.DOB = Convert.ToDateTime(DOBdateTimePicker.Value);
c.Age = Convert.ToInt32(ageTextBox.Text);
c.EntryDate = Convert.ToDateTime(DateTimePicker1.Value);
customerInsertbool = c.Insert(c);
for (int i = 0; i < CheckedItemsDataTable.Rows.Count; i++)
{
DataRow row = CheckedItemsDataTable.Rows;
Selection = Convert.ToBoolean(row[0]);
if (Selection == true)
{
t.iD = tIdTextBox.Text;
t.examinationId = Convert.ToString(row[3]);
t.eCustomerId = cIdTextBox.Text;
t.eStaffId = retrievedStaffID;
t.examinationDate = Convert.ToDateTime(DateTimePicker1.Value);
t.doctorAssigned = doctorAssignedTextBox.Text;
t.amount = Convert.ToDecimal(row[2]);
}
//Reload data on the data gridview.
LoadCustomers();
LoadTransactions();
//Inserting data into database.
transactionInsertbool = t.Insert(t);
if (customerInsertbool == true && transactionInsertbool == true)
{
SuccessCounter++;
generateTransactionId();
if (SuccessCounter == CheckCounter)
{
MessageBox.Show("The Record Has Been Saved Successfully.");
generateCustomerId();
}
else if (generateCustomerId == false)
{
FailureCounter++;
if (FailureCounter == CheckCounter)
{
MessageBox.Show("Something Went Wrong. Unable To Save This Record.");
}
}
}
}
Я использовал эти методы для создания идентификаторов. С тех пор я перешел на использование столбцов IDENTITY и больше их не использую.
public void generateCustomerId()
{
try
{
string sql = "select MAX(iD) from db_Customers";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
cmd = new SqlCommand(sql, conn);
conn.Open();
var maxid = cmd.ExecuteScalar() as string;
if (maxid == null)
{
cIdTextBox.Text = "C-ID000000000001";
}
else
{
int intval = int.Parse(maxid.Substring(4, 12));
intval++;
cIdTextBox.Text = String.Format("C-ID{0:000000000000}", intval);
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void generateTransactionId()
{
try
{
string sql = "select MAX(Id) from db_Transactions";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
cmd = new SqlCommand(sql, conn);
conn.Open();
var maxid = cmd.ExecuteScalar() as string;
if (maxid == null)
{
tIdTextBox.Text = "T-ID000000000001";
}
else
{
int intval = int.Parse(maxid.Substring(4, 12));
intval++;
tIdTextBox.Text = String.Format("T-ID{0:000000000000}", intval);
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Это мой нынешний код, и он не работает должным образом, и я не знаю, почему. Сейчас я использую столбцы IDENTITY и SCOPE_IDENTITY(); для передачи идентификатора в дочернюю таблицу. Я проверяю 3 элемента и ожидаю добавления 3 записей, но вместо этого я получил 50 добавленных записей. Идентификаторы: (1,2,3,3,3.... до 50-го, потому что у меня всего 50 элементов в моей таблице данных. Каким-то образом мой "if (Selection == true)" внутри цикла for не работает должным образом, как это было в моем старом коде. Я, вероятно, что-то упустил из виду.
private void Button1_Click(object sender, EventArgs e)
{
DataTable CheckedItemsDataTable = e.selectCheckedItems();
string StaffinCharge = staffComboBox.SelectedValue.ToString();
string retrievedStaffID = Convert.ToString(s.getIdfromName(StaffinCharge));
bool isSuccess = false;
bool transactionInsertbool;
bool customerInsertbool;
bool ItemSelection;
int SuccessCounter;
int FailureCounter;
int CheckCounter = CheckBoxCache();
string RetrievedPatientID;
int ResultingPatientID;
int NewID;
bool transactionInsertbool;
bool customerInsertbool;
try
{
string sql = "INSERT INTO db_Customers (Name, Sex, Address, MaritalStatus, DOB, Age, EntryDate) VALUES (@Name, @Sex, @Address, @MaritalStatus, @DOB, @Age, @EntryDate); SET @LastId = SCOPE_IDENTITY();";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Name", nameTextBox.Text;);
cmd.Parameters.AddWithValue("@Sex", sexComboBox.Text);
cmd.Parameters.AddWithValue("@Address", addressTextBox.Text);
cmd.Parameters.AddWithValue("@MaritalStatus", maritalstatusComboBox.Text);
cmd.Parameters.AddWithValue("@DOB", Convert.ToDateTime(DOBdateTimePicker.Value));
cmd.Parameters.AddWithValue("@Age", Convert.ToInt32(ageTextBox.Text));
cmd.Parameters.AddWithValue("@EntryDate", Convert.ToDateTime(DateTimePicker1.Value));
SqlParameter newIDParameter = new SqlParameter("@LastId", SqlDbType.Int);
newIDParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(newIDParameter);
conn.Open();
int rows = cmd.ExecuteNonQuery();
int NewId = (int)newIDParameter.Value;
conn.Close();
if (rows > 0)
{
isSuccess = true;
LoadCustomers();
}
else
{
isSuccess = false;
}
for (int i = 0; i < CheckedItemsDataTable.Rows.Count; i++)
{
DataRow row = CheckedItemsDataTable.Rows;
ItemSelection = Convert.ToBoolean(row[0]);
if (ItemSelection == true)
{
t.examinationId = Convert.ToString(row[3]);
t.eCustomerId = NewId;
t.eStaffId = retrievedStaffID;
t.examinationDate = Convert.ToDateTime(DateTimePicker1.Value);
t.doctorAssigned = doctorAssignedTextBox.Text;
t.amount = Convert.ToDecimal(row[2]);
}
transactionInsertbool = t.InsertTests(t);
LoadCustomers();
LoadTransactions();
}
if (customerInsertbool == true && transactionInsertbool == true)
{
SuccessCounter++;
if (SuccessCounter == CheckCounter)
{
MessageBox.Show("The Record Has Been Saved Successfully.");
}
else if (customerInsertbool == false && transactionInsertbool == false)
{
FailureCounter++;
if (FailureCounter == CheckCounter)
{
MessageBox.Show("Something Went Wrong. Unable To Save This Record.");
}
}
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... dentity-co
Оператор if внутри цикла for не работает должным образом после переключения на столбцы IDENTITY ⇐ C#
Место общения программистов C#
1760983392
Anonymous
Этот код я использовал раньше. Он работает так, как задумано. Я заполняю поля и проверяю некоторые элементы в DataGridView, который использую в качестве флажка, и успешно ввожу их оба в родительскую и дочернюю таблицы. Если я проверю 3 элемента, то 3 записи добавляются в таблицу «Транзакции» и 1 запись в таблицу «Клиенты».
private void Button1_Click(object sender, EventArgs e)
{
DataTable CheckedItemsDataTable = e.selectCheckedItems();
string StaffinCharge = staffComboBox.SelectedValue.ToString();
string retrievedStaffID = Convert.ToString(s.getIdfromName(StaffinCharge));
bool Selection;
bool transactionInsertbool;
bool customerInsertbool;
int SuccessCounter = 0;
int FailureCounter = 0;
int CheckCounter = CheckBoxCache();
//Get the value from the input fields.
c.Id = cIdTextBox.Text;
c.Name = nameTextBox.Text;
c.Sex = genderComboBox.Text;
c.Address = addressTextBox.Text;
c.MaritalStatus = maritalstatusComboBox.Text;
c.DOB = Convert.ToDateTime(DOBdateTimePicker.Value);
c.Age = Convert.ToInt32(ageTextBox.Text);
c.EntryDate = Convert.ToDateTime(DateTimePicker1.Value);
customerInsertbool = c.Insert(c);
for (int i = 0; i < CheckedItemsDataTable.Rows.Count; i++)
{
DataRow row = CheckedItemsDataTable.Rows[i];
Selection = Convert.ToBoolean(row[0]);
if (Selection == true)
{
t.iD = tIdTextBox.Text;
t.examinationId = Convert.ToString(row[3]);
t.eCustomerId = cIdTextBox.Text;
t.eStaffId = retrievedStaffID;
t.examinationDate = Convert.ToDateTime(DateTimePicker1.Value);
t.doctorAssigned = doctorAssignedTextBox.Text;
t.amount = Convert.ToDecimal(row[2]);
}
//Reload data on the data gridview.
LoadCustomers();
LoadTransactions();
//Inserting data into database.
transactionInsertbool = t.Insert(t);
if (customerInsertbool == true && transactionInsertbool == true)
{
SuccessCounter++;
generateTransactionId();
if (SuccessCounter == CheckCounter)
{
MessageBox.Show("The Record Has Been Saved Successfully.");
generateCustomerId();
}
else if (generateCustomerId == false)
{
FailureCounter++;
if (FailureCounter == CheckCounter)
{
MessageBox.Show("Something Went Wrong. Unable To Save This Record.");
}
}
}
}
Я использовал эти методы для создания идентификаторов. С тех пор я перешел на использование столбцов IDENTITY и больше их не использую.
public void generateCustomerId()
{
try
{
string sql = "select MAX(iD) from db_Customers";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
cmd = new SqlCommand(sql, conn);
conn.Open();
var maxid = cmd.ExecuteScalar() as string;
if (maxid == null)
{
cIdTextBox.Text = "C-ID000000000001";
}
else
{
int intval = int.Parse(maxid.Substring(4, 12));
intval++;
cIdTextBox.Text = String.Format("C-ID{0:000000000000}", intval);
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void generateTransactionId()
{
try
{
string sql = "select MAX(Id) from db_Transactions";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
cmd = new SqlCommand(sql, conn);
conn.Open();
var maxid = cmd.ExecuteScalar() as string;
if (maxid == null)
{
tIdTextBox.Text = "T-ID000000000001";
}
else
{
int intval = int.Parse(maxid.Substring(4, 12));
intval++;
tIdTextBox.Text = String.Format("T-ID{0:000000000000}", intval);
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Это мой нынешний код, и он не работает должным образом, и я не знаю, почему. Сейчас я использую столбцы IDENTITY и SCOPE_IDENTITY(); для передачи идентификатора в дочернюю таблицу. Я проверяю 3 элемента и ожидаю добавления 3 записей, но вместо этого я получил 50 добавленных записей. Идентификаторы: (1,2,3,3,3.... до 50-го, потому что у меня всего 50 элементов в моей таблице данных. Каким-то образом мой "if (Selection == true)" внутри цикла for не работает должным образом, как это было в моем старом коде. Я, вероятно, что-то упустил из виду.
private void Button1_Click(object sender, EventArgs e)
{
DataTable CheckedItemsDataTable = e.selectCheckedItems();
string StaffinCharge = staffComboBox.SelectedValue.ToString();
string retrievedStaffID = Convert.ToString(s.getIdfromName(StaffinCharge));
bool isSuccess = false;
bool transactionInsertbool;
bool customerInsertbool;
bool ItemSelection;
int SuccessCounter;
int FailureCounter;
int CheckCounter = CheckBoxCache();
string RetrievedPatientID;
int ResultingPatientID;
int NewID;
bool transactionInsertbool;
bool customerInsertbool;
try
{
string sql = "INSERT INTO db_Customers (Name, Sex, Address, MaritalStatus, DOB, Age, EntryDate) VALUES (@Name, @Sex, @Address, @MaritalStatus, @DOB, @Age, @EntryDate); SET @LastId = SCOPE_IDENTITY();";
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Name", nameTextBox.Text;);
cmd.Parameters.AddWithValue("@Sex", sexComboBox.Text);
cmd.Parameters.AddWithValue("@Address", addressTextBox.Text);
cmd.Parameters.AddWithValue("@MaritalStatus", maritalstatusComboBox.Text);
cmd.Parameters.AddWithValue("@DOB", Convert.ToDateTime(DOBdateTimePicker.Value));
cmd.Parameters.AddWithValue("@Age", Convert.ToInt32(ageTextBox.Text));
cmd.Parameters.AddWithValue("@EntryDate", Convert.ToDateTime(DateTimePicker1.Value));
SqlParameter newIDParameter = new SqlParameter("@LastId", SqlDbType.Int);
newIDParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(newIDParameter);
conn.Open();
int rows = cmd.ExecuteNonQuery();
int NewId = (int)newIDParameter.Value;
conn.Close();
if (rows > 0)
{
isSuccess = true;
LoadCustomers();
}
else
{
isSuccess = false;
}
for (int i = 0; i < CheckedItemsDataTable.Rows.Count; i++)
{
DataRow row = CheckedItemsDataTable.Rows[i];
ItemSelection = Convert.ToBoolean(row[0]);
if (ItemSelection == true)
{
t.examinationId = Convert.ToString(row[3]);
t.eCustomerId = NewId;
t.eStaffId = retrievedStaffID;
t.examinationDate = Convert.ToDateTime(DateTimePicker1.Value);
t.doctorAssigned = doctorAssignedTextBox.Text;
t.amount = Convert.ToDecimal(row[2]);
}
transactionInsertbool = t.InsertTests(t);
LoadCustomers();
LoadTransactions();
}
if (customerInsertbool == true && transactionInsertbool == true)
{
SuccessCounter++;
if (SuccessCounter == CheckCounter)
{
MessageBox.Show("The Record Has Been Saved Successfully.");
}
else if (customerInsertbool == false && transactionInsertbool == false)
{
FailureCounter++;
if (FailureCounter == CheckCounter)
{
MessageBox.Show("Something Went Wrong. Unable To Save This Record.");
}
}
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79795150/if-statement-inside-for-loop-not-working-properly-after-switching-to-identity-co[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия