Я работаю над проектом, в котором пользователь получает набор лицензионных ключей и экспортирует его в текстовый файл. Затем информация отображается в списке, как показано ниже. Я использую C # и Windows Forms:
![enter image description here](https://i.stack.imgur.com/zJbLp.png)
Кроме того, я хотел бы также сохранить данные из списка в локальной базе данных SQL Server для целей ведения записей в моем приложении. Я испробовал различные методы, которые я нашел в Интернете, чтобы сделать это, но все они оказались безуспешными.
Один из методов, которые я нашел, находится по этой ссылке:
https://www.youtube.com/watch?v=hUZGyA6UKGI&t=0s&index=26&list=PLZEMJ7iJtVdq9aMAiDfRlMoNrzGaWOfkZ
Вот код, который я использовал из видеоурка:
private void recordinserted(List<string>li)
{
StringBuilder stringbi = new StringBuilder(string.Empty);
foreach (string item in li)
{
const string qry = "Insert into [LicenseDB](Comapny Name, Software Name, LicenseKeys)values";
stringbi.AppendFormat("{0}('{i}');",qry,item);
}
SqlConnection con = new SqlConnection();
con.ConnectionString = (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Database.mdf;Integrated Security=True;Connect Timeout=30");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = stringbi.ToString();
cmd.Connection = con;
int a = cmd.ExecuteNonQuery();
if (a > 0)
{
MessageBox.Show("inserted");
}
}
// adding into local database (method placed in button click)
List<string> li = new List<string>();
foreach (ListViewItem item in lbGeneratedKeys.Items)
{
if (item.Selected)
{
li.Add(item.Text);
}
recordinserted(li);
}
Я понял, что этот человек использует C # с ASP.Net и использует свойство ListITem, которого нет в Windows Form.
Другой метод, который я использовал, это классический SqlConnection
метод:
//adding into local database
using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Database.mdf;Integrated Security=True;Connect Timeout=30"))
{
con.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO LicenseDB (Company Name, Software Name, LicenseKeys,LicenseFileNo) VALUES (@cName, @sName, @lKeys, @lno)");
cmd.CommandType = CommandType.Text;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lbGeneratedKeys.Items.Add(dr[0].ToString());
lbGeneratedKeys.Items.Add(dr[1].ToString());
lbGeneratedKeys.Items.Add(dr[2].ToString());
lbGeneratedKeys.Items.Add(dr[3].ToString());
}
}
Я использовал (dr[0].ToString()
) для чтения каждой строки из списка для добавления в базу данных, где каждое число представляет строку в списке. Например. [0] представляет название компании в списке. Однако, когда я пытаюсь выполнить программу, возникает ошибка, указывающая, что строка SqlDataReader
не инициализирована.
Кроме того, поскольку в моей программе есть алгоритм, позволяющий пользователям создавать более одного лицензионного ключа, мне также нужна помощь в том, как сгруппировать эти несколько строк сгенерированных лицензионных ключей в один столбец базы данных в таблице базы данных. Например, в моем пользовательском интерфейсе выше я решил создать 3 лицензионных ключа, и каждый лицензионный ключ занимает строку в ListBox. Я хотел бы сгруппировать эти три строки вместе, чтобы поместить их в одну переменную столбца базы данных (licenseKeys). Мне бы хотелось, чтобы алгоритм мог динамически считывать сгенерированные ключи, а также чтобы пользователь мог генерировать столько лицензионных ключей, сколько необходимо.