R45H1D Ответов: 2

Как вставить несколько строк столбца datagrid в одно поле с помощью базы данных access на языке C#


я хочу сохранить все строки столбца (ItemName) в одно поле (itemname) в базе данных access. прямо сейчас строки сохраняются в 1 строке данных в 1 поле. но я хочу сохранить все данные строки в 1 поле на ItemName.
вот скриншот этой колонки. чьи строки нужно хранить в одном поле.
https://lh3.googleusercontent.com/-Q-kPiuPwlM4/V2eStcNAC5I/AAAAAAAAAME/XXjEVI_R3Nk7vvFbCX0_c9OxtVVEls13QCCo/s800/Untitled.png[^]

Что я уже пробовал:

кон.Открыть();

for (int i = 0; i < dataGridView1.Rows.Граф-1; i++)
{

строки количество = dataGridView1.Строки[я].Ячейки[0].Значение.Метод toString();

Объект oledbcommand команду cmd = новый объект oledbcommand("вставить в продажу (имя) значения ('" + количество + "')", кон);

УМК.Метод executenonquery();

Ящик для сообщений.Показать("Сведения Зарегистрированы");

}

R45H1D

имена элементов bro сохраняются в отдельных строках. но я хочу сохранить все имена элементов в одном поле

R45H1D

ваш код сохраняет имена элементов в таком виде.
строка 1 а
строка 2 б
но я хочу экономить вот так.
строка 1 a,b

.net developer123456789

пожалуйста, попробуйте :-
StringBuilder sbAmount = новый StringBuilder();
строка Addcomma = "";
for (int i = 0; i < dataGridView1.Rows.Граф-1; i++)
{
сбамаунт.AppendFormat("{0}{1}", Addcomma, dataGridView1. Rows[i].Ячейки[0].Значение.Метод toString());
Addcomma = ",";
}

строковые суммы = sbAmount.Метод toString();

кон.Открыть();

Объект oledbcommand команду cmd = новый объект oledbcommand("вставить в продажу (имя) значения ('" + количество + "')", кон);

УМК.Метод executenonquery();

Ящик для сообщений.Показать("Сведения Зарегистрированы");

2 Ответов

Рейтинг:
2

Zahid Mughal

Привет, поскольку данные возвращаются в нескольких строках из базы данных, поэтому вам нужно использовать "DataSet", который используется для этой цели.

например:

var ds = new DataSet();
var conn = DACUtil.GetConnection();
try
{
    SqlCommand cmd = new SqlCommand("Your-Query-Here", conn);
    var da = new SqlDataAdapter { Select7Command = cmd };

    da.Fill(ds);

    ds.Tables[0].TableName = "Emp";
    ds.AcceptChanges();

}
finally
{
    conn?.Dispose();
}
return ds;


Надеюсь, это будет полезно для Вас, пожалуйста, не забудьте отметить мой хороший рейтинг. :)


[no name]

а после заполнения "ds" из базы данных вы просто настраиваете его с помощью GridView или используете для любых других целей.

Рейтинг:
0

OriginalGriff

Во-первых, почему? Как правило, это не очень хорошая идея - хотя это легко сделать и экономит вам немного работы при проектировании БД, это создает огромные проблемы позже, когда вы захотите использовать данные снова. Обычно гораздо лучше хранить их в виде отдельных строк, которые в какой-то форме возвращают ключ к "общей" информации о строках. Немного сложнее в дизайне, но значительно проще в долгосрочной перспективе.
Во-вторых, не делайте доступ к базе данных таким образом. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Но если вы должны...все просто.

StringBuilder sb = new StringBuilder();
string sep = "";
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
   {
   sb.AppendFormat("{0}{1}", sep, dataGridView1.Rows[i].Cells[0].Value.ToString());
   sep = "|";
   }
string amounts = sb.ToString();
Затем вы можете вставить одно значение с помощью параметризованного запроса:
using (OleDbCommand cmd = new OleDbCommand("INSERT INTO sale (ItemName) VALUES (@AM)", con))
   {
   cmd.Parameters.AddWithValue("@AM", amounts);
   cmd.ExecuteNonQuery();
   }
MessageBox.Show("Data Registered");


"теперь... как описывает первая фотография моего заявления. я выбираю имена элементов из комбо и других данных. когда я нажимаю сохранить. все выбранные данные должны сохраняться в БД в соответствующем столбце, А теперь дайте мне знать ваше предложение. как я могу сохранить имена товаров в отдельном поле, но их идентификатор счета-фактуры должен быть одинаковым?"
А, это ты сделал. Ах милый...

Это плохой дизайн базы данных. Вы обеспокоены тем, что ваша база данных станет слишком большой, и вы храните одну и ту же текстовую информацию снова, и снова, и снова!
Посмотрите на свой второй снимок экрана. Сколько раз вы собираетесь хранить одно и то же имя компании? Одно и то же имя предмета? Это не очень хороший дизайн.
Что вам нужно, так это отдельные таблицы.
Одна таблица содержит ответственностью:
ID    CoName    CoAddress    TelNo    Email   DiscountPercentage   ...

Одна таблица содержит элементы:
ID    Description    Price

Другой держит счета-фактуры:
ID    CompanyID    InvoiceDate   InvoiceNumber   InvoiceTotalValue...

Другой держит линии счетов-фактур:
ID    InvoiceID    ItemID     Quantity     Value

Где CompanyID, InvoiceID и ItemID-это внешние ключи, которые ссылаются на соответствующие значения идентификатора таблицы.
Все значения идентификаторов могут быть полями идентификаторов, поэтому БД автоматически сгенерирует их для вас при вставке данных.

Когда вы делаете это таким образом, многие вещи становятся тривиальными: изменение цены чего - то-это единственное место для изменения, и поскольку вы используете это значение для генерации каждого значения строки счета-фактуры (item.price * quantity), оно не влияет на существующие счета-фактуры-это серьезно важно: вы можете попасть в тюрьму за это!
Таким образом, вы храните информацию только один раз, и все изменения становятся тривиальными. И все системы БД очень, очень хорошо работают с данными, организованными таким образом. У них есть специальные запросы (Подробнее см. SQL JOIN) для их обработки, и они могут гарантировать, что вы не сделаете ошибок при вводе данных.
Это выглядит как гораздо больше работы, чтобы настроить, но на самом деле это не так - это больше работы, но не так много. И поверьте мне: это сэкономит вам огромное количество работы позже!


R45H1D

братан 1-й код вообще не сохраняет данные. и если сохранение всех имен элементов в 1 поле не является хорошим вариантом, то как я могу справиться с этим? а если я буду хранить имена элементов в отдельных столбцах, то и база данных будет огромной. какое твое драгоценное предложение?

OriginalGriff

"1-й код вообще не сохраняет данные"
Это потому, что он собирает его в один фрагмент данных...который сохраняет второй фрагмент кода.
Почему вы думаете, что БД будет больше, если вы сохраните их отдельно, чем если вы сохраните их как одну строку? И как вы ожидали, что сможете использовать их, если вы это сделаете? Данные, разделенные запятыми, - это Пита для использования, так как обработка строк SQL очень слаба.
Что именно вы пытаетесь сделать? Для чего используются эти данные?

R45H1D

хорошо, позвольте мне объяснить. сначала посмотрите этот скриншот
https://lh3.googleusercontent.com/-i1i12JOTXCI/V2edZlHLwwI/AAAAAAAAAMY/gGx1MCDpxgoOVZhq_WlBpvli44rITX35wCCo/s800/a.png

R45H1D

потом этот образ. это изображение моей БД, где имена элементов должны быть сохранены
https://lh3.googleusercontent.com/-neiQsZ1gkMQ/V2edZ5y3UrI/AAAAAAAAAMg/askktbqxS_IVc-F1H8RdTM3QP4CeKxokQCCo/s800/b.png

R45H1D

теперь... как описано на первой картинке моего приложения. я выбираю имена элементов из комбо и других данных. когда я нажимаю сохранить. все выбранные данные должны сохраняться в БД в соответствующем столбце, А теперь дайте мне знать ваше предложение. как я могу сохранить имена товаров в отдельном поле, но их идентификатор счета-фактуры должен быть одинаковым?

OriginalGriff

Ответ обновлен.

R45H1D

ваше предложение очень полезно и потрясающе. большое спасибо за ваш драгоценный совет.. я буду иметь это в виду. я внесу изменения в свою БД, как вы предложили, и дам вам знать, если мне понадобится ваша помощь. еще раз большое спасибо братан

OriginalGriff

Пожалуйста!

Member 12385126

как создать запрос...

Пример таблицы: Transact

Дата Входа PartyIdno Catage Сумма Кредита / Дебета
------ ---------- ---------- --------- ------------ --------
1 02-01-2016 1 Квитанция C 8200
1 02-01-2016 5 Оплата D 8,200
2 14-02-2016 1 Продажи D 11,200
2 14-02-2016 4 Продажи C 6500
2 14-02-2016 2 Продажи C 4,700

Выход
------

Дата Ввода PartyIdno Дебет Кредит Баланс
----- ------ ---------- ------ ------- -----------
SubAmount Механизма Subid
----- ---------
1 02-01-2016 1 8,200 8,200 Cr
02-01-2016 5 8200 Dr
2 14-02-2016 1 11,200 3,000 Dr
14-02-2016 4 6500 Cr
14-02-2016 2 4700 Cr

инструкция SQL :

GLOBALSSS.Open_DB_Connection()

Дим cmd в качестве новой команды SQL("выбрать Т1.Запись,сливаются(Т1.PARTYIDNO,Т2.PARTYIDNO) а цвет из Transact Т1 полное внешнее соединение (выбрать PARTYIDNO из Transact где запись=1) Т2

О 1 = 0 где T1.PARTYIDNO=1 или T2.PARTYIDNO&ЛТ;&ГТ;-1 ", подключение)

Dim da как новый SqlDataAdapter(cmd)

Дим ДТ в качестве нового объекта DataTable

да.Заполнить(ДТ)

DataGridView1.Источник данных = ДТ

GLOBALSSS.Close_DB_Connection()

OriginalGriff

Не открывайте старые вопросы: опубликуйте это как новый вопрос:
https://www.codeproject.com/Questions/ask.aspx

Member 12385126

как создать запрос...

Пример таблицы: Transact

Дата Входа PartyIdno Catage Сумма Кредита / Дебета
------ ---------- ---------- --------- ------------ --------
1 02-01-2016 1 Квитанция C 8200
1 02-01-2016 5 Оплата D 8,200
2 14-02-2016 1 Продажи D 11,200
2 14-02-2016 4 Продажи C 6500
2 14-02-2016 2 Продажи C 4,700

Выход
------

Дата Ввода PartyIdno Дебет Кредит Баланс
----- ------ ---------- ------ ------- ---------
SubAmount Механизма Subid
----- ---------
1 02-01-2016 1 8,200 8,200 Cr
02-01-2016 5 8200 Dr
2 14-02-2016 1 11,200 3,000 Dr
14-02-2016 4 6500 Cr
14-02-2016 2 4700 Cr

инструкция SQL :

GLOBALSSS.Open_DB_Connection()

Дим cmd в качестве новой команды SQL("выбрать Т1.Запись,сливаются(Т1.PARTYIDNO,Т2.PARTYIDNO) а цвет из Transact Т1 полное внешнее соединение (выбрать PARTYIDNO из Transact где запись=1) Т2

О 1 = 0 где T1.PARTYIDNO=1 или T2.PARTYIDNO&ЛТ;&ГТ;-1 ", подключение)

Dim da как новый SqlDataAdapter(cmd)

Дим ДТ в качестве нового объекта DataTable

да.Заполнить(ДТ)

DataGridView1.Источник данных = ДТ

GLOBALSSS.Close_DB_Connection()

Member 12385126

pls rply мой вопрос ответ????

OriginalGriff

Я цитирую себя:
"Не открывайте старые вопросы: опубликуйте это как новый вопрос:
https://www.codeproject.com/Questions/ask.aspx"