Как добавить данные из ListBox в базу данных SQL Server в формах C # Windows?

Я оставляю этот вопрос и отвечу сюда, чтобы люди не сходили с ума и искали все возможные решения вручную, как я. Я обнаружил, что добавление контекста в метод Configure IdentityHostingStartup.cs вызывало проблему. Я изменил место, где я добавил контекст к методу Configure для Startup.cs, и он работал нормально.

namespace ShareAndCare
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });            

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddDbContext<ShareAndCareContext>(options =>
                   options.UseLazyLoadingProxies().UseSqlServer(
                       Configuration.GetConnectionString("ShareAndCareContextConnection")));

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseAuthentication();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });                
        }   
    }
}
0
задан depressedGirl 25 January 2019 в 10:27
поделиться

2 ответа

Надеюсь, я понял вашу проблему:

Прежде всего, я думаю, очень важно определить вашу модель данных. Например, чтобы пользователь мог определить много ключей, я бы использовал другую таблицу, в которой все ключи были сохранены, после чего вам нужно определить, может ли один и тот же ключ быть связан с несколькими строками таблицы. «LicenseDB» (в таблице «LicenseDB» у вас есть столбцы «Название компании», «Название программного обеспечения», «LicenseFileNo»). В этом случае у вас будет отношение (n: n), а затем вам нужно будет создать другую промежуточную таблицу, которая определяет отношение между таблицей 'keys' и таблицей 'LicenseDB'. Если это не так, то вы просто определяете отношение между ключами и LicenseDB (n: 1), добавляя столбец licenseDbID к таблице keys, который связывает множество ключей с одной строкой в ​​таблице LicenseDB [112 ]

С другой стороны, проблема с вашим кодом заключается в том, что вы пытаетесь вставить данные, а не читать данные, поэтому вам не нужен DataReader, вместо этого вы просто можете реализовать что-то вроде этого: [113 ]

using (SqlConnection con = new SqlConnection('YOUR STRING CONNECTION'))
     {
        con.Open();

        string comando = "INSERT INTO LicenseDB (companie, software) VALUES ('" + lbGeneratedKeys.Items[0].ToString() + "','" + lbGeneratedKeys.Items[1].ToString() + "')";
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = comando;

        cmd.Connection = con;

        cmd.ExecuteNonQuery();

     }

В этом случае два значения вставляются в таблицу LicenseDB - значения для названия компании и программного обеспечения.

Я надеюсь, что помог вам.

0
ответ дан Carlos Pozos 25 January 2019 в 10:27
поделиться

Я вернулся к своему предыдущему школьному проекту и сумел сохранить данные списка в базу данных SQL. Всего у меня есть два списка: один для разрешения пользователю экспортировать в виде текстового файла, а второй - специально для хранения только сгенерированных лицензионных ключей. Второй список не установлен в моей программе.

Коды, которые я использовал:

 private void exportKey_Click(object sender, EventArgs e)
    {
        //adding into local database
        //excludes adding licensekeys
        SqlConnection sqlCon = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Database.mdf;Integrated Security=True;Connect Timeout=30");
        sqlCon.Open();
        SqlCommand sqlCmd = new SqlCommand("addLicensedata", sqlCon);
        sqlCmd.CommandType = CommandType.StoredProcedure;

        sqlCmd.Parameters.AddWithValue(@"companyName", companyTextbox.Text.Trim());
        sqlCmd.Parameters.AddWithValue(@"softwareName", softwareTextbox.Text.Trim());
        sqlCmd.Parameters.AddWithValue(@"prodID", prodidTextbox.Text.Trim());
        sqlCmd.Parameters.AddWithValue(@"licenseType", cbLicensetype.Text.Trim());
        sqlCmd.Parameters.AddWithValue(@"LicenseNo", licensekeyNum.Text.Trim()); //no of license keys 

        sqlCmd.ExecuteNonQuery();
        //MessageBox.Show("Added to database");
        sqlCon.Close();

        if (cbLicensetype.SelectedItem.ToString() == "Trial")
        {
            sqlCmd.Parameters.AddWithValue(@"TrialDays", tbTrialdays.Text.Trim());
        }

        addtoFKtable();

private void addtoFKtable()
    {
        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("addLicensekeys", Con);
        Cmd.CommandType = CommandType.StoredProcedure;

        Cmd.Parameters.AddWithValue(@"LicenseNo", licensekeyNum.Text.Trim());
        Cmd.Parameters.AddWithValue(@"LicenseKeys", lbHidden.Text.Trim());
        Cmd.Parameters.AddWithValue(@"prodID", prodidTextbox.Text.Trim());
        Cmd.Parameters.AddWithValue(@"companyName", companyTextbox.Text.Trim());
        Cmd.ExecuteNonQuery();
        //MessageBox.Show("Added license to database");
        Con.Close();
    }

Я сохранил свои команды SQL как хранимую процедуру в базе данных и просто вызвал команду в своих кодах.

0
ответ дан depressedGirl 25 January 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: