Asyraf Patt Ответов: 1

C# winform : отправить значение флажка в доступ к базе данных


Хе, Это мой код для изменения значения флажка на строку и отправки в базу данных. Но я не могу сохранить его в своей базе данных.

спасибо,

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Checkbox_Database
{
    public partial class Form1 : Form
    {

        //OPEN CONNECTION
        OleDbConnection con = new OleDbConnection(@"");

        String gen;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'cHECKBOX_DATABASEDataSet.Table1' table. You can move, or remove it, as needed.
            this.table1TableAdapter.Fill(this.cHECKBOX_DATABASEDataSet.Table1);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Checkbox

            if (checkBox1.Checked == true)
            {
                gen = "Male";
            }
            else if (checkBox2.Checked == true)
            {
                gen = "female";
            }

            try
            {
                con.Open();
                OleDbCommand cmd = con.CreateCommand();
                cmd.CommandText = "insert into Table1 values('" + textBox1.Text + "','"+ gen +"')";
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Record insert Succesfully");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }


        }
    }
}

Karthik_Mahalingam

что такое сообщение об ошибке?

1 Ответов

Рейтинг:
2

OriginalGriff

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

Существует также вероятность того, что ваша вставка не работает из-за того, что вы не указываете поля:

cmd.CommandText = "insert into Table1 values('" + textBox1.Text + "','"+ gen +"')";
Когда вы вставляете таким образом, SQL начинает вставлять значения из первого столбца вперед - что опасно, потому что если столбцы по какой-либо причине переупорядочиваются, ваш код вставляется в неправильные строки и либо падает, либо, что еще хуже, заполняет вашу БД смесью допустимых и недопустимых данных. Кроме того, если у вас есть столбец идентификатора строки, который является, скажем, столбцом идентификатора, они обычно являются первым столбцом, и вы не можете установить для них значение - SQL будет жаловаться, если вы попытаетесь.
Всегда указывайте поля, всегда используйте параметризованные запросы:
cmd.CommandText = "INSERT INTO Table1 (myColumn1, myColumn2)  VALUES(@V1, @V2)"
cmd.Parameters.AddWithValue("@V1", textBox1.Text);
cmd.Parameters.AddWithValue("@V2". gen);