niceaashish Ответов: 1

Дважды вставьте запись создания запроса в базу данных.


Код за файл

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace knockdetails
{
    public partial class DetailsUI : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                loadgrid();
            }
        }

        protected void state_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source = PC\SQLEXPRESS; Initial Catalog = invoice; Integrated Security = True");
            con.Open();
            int a = Convert.ToInt16(state.SelectedItem.Value);
            string ab = state.SelectedItem.Text;
            SqlCommand objcmd = new SqlCommand("Select district.name from district inner join state on district.state_id = state.id where state.id = '" + a + "' ", con);
            DataTable objdt = new DataTable();
            SqlDataAdapter objda = new SqlDataAdapter(objcmd);
            objda.Fill(objdt);
            objcmd.ExecuteReader();
            district.DataSource = objdt;
            district.DataTextField = objdt.Columns["name"].ToString();
            district.DataBind();
            con.Close();

        }

        protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            joiningdate.Text = Calendar1.SelectedDate.Date.ToString("MM/dd/yyyy");
            Calendar1.Visible = false;
        }

        protected void CalenderButton_Click(object sender, EventArgs e)
        {
            Calendar1.Visible = true;
        }

        protected void Insert_Click(object sender, EventArgs e)
        {
            


            try {
                SqlConnection con = new SqlConnection(@"Data Source = PC\SQLEXPRESS; Initial Catalog = invoice; Integrated Security = True");
                con.Open();
                int a = Convert.ToInt16(state.SelectedItem.Value);
                string ab = state.SelectedItem.Text;
                Response.Write(ab);
                Response.Write(a);
                SqlCommand objcmd = new SqlCommand("INSERT INTO [dbo].[details]([state],[district],[name],[mobile],[email],[doj],[designation]) VALUES ('" + ab + "', '" + district.SelectedItem.Value + "', '" + name.Text + "', '" + mobilenumber.Text + "', '" + email.Text + "',  '" + joiningdate.Text + "', '" + designation.SelectedItem.Value + "')", con);
                DataSet objds = new DataSet();
                SqlDataAdapter objda = new SqlDataAdapter(objcmd);
                objda.Fill(objds);
                objcmd.ExecuteNonQuery();
                con.Close();
                loadgrid();
            }
            catch
            {
                
            }
        }

        public void loadgrid()
        {
            SqlConnection con = new SqlConnection(@"Data Source = PC\SQLEXPRESS; Initial Catalog = invoice; Integrated Security = True");
            con.Open();
            SqlCommand objcmd = new SqlCommand("Select * from details ", con);
            DataSet objds = new DataSet();
            SqlDataAdapter objda = new SqlDataAdapter(objcmd);
            objda.Fill(objds);
            objcmd.ExecuteReader();
            DataDetails.DataSource = objds;
            DataDetails.DataBind();
            con.Close();

            name.Text = "";
            mobilenumber.Text = "";
            state.SelectedItem.Value = "";
            district.SelectedItem.Value = "";
            email.Text = "";
            joiningdate.Text = "";
        }
    }
}


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

состояние управления dropdownlist с АВТОПОСТ под панель обновления - с привязкой к данным из SQL источника
district is dropdownlist - выбирается в зависимости от выбранного значения выпадающего списка state
имя-это текст
мобильный - это текст
электронная почта-это текст с регулярной проверкой exp
дата присоединения имеет текстовое поле с полученным значением из календаря с событием Calendar1_SelectionChanged

я также добавил кнопку календаря, чтобы снова показать календарь в случае изменения даты

и кнопка для подзаголовка страницы

RossMW

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

Кроме того, есть ли в базе данных две новые записи, созданные или просто сетка, отображающая дубликаты. Если это база данных, вы должны быть в состоянии пройти через код, чтобы увидеть, где это происходит (код запускается дважды или сетка также добавляет запись.) Если это просто сетка, отображающая дубликаты, то убедитесь, что пояс очищен перед повторным заселением.

1 Ответов

Рейтинг:
11

OriginalGriff

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

SqlDataAdapter objda = new SqlDataAdapter(objcmd);
objda.Fill(objds);
objcmd.ExecuteNonQuery();

Он собирается вставить одну и ту же строку дважды...

В-третьих, никогда не" глотайте " исключения: регистрируйте их, сообщайте пользователю, что угодно-делайте с ними что-нибудь. Когда вы используете пустой catch блок вы скрываете любые доказательства того, что проблемы вашего кода могут быть, даже от себя. И вам часто это нужно, чтобы исправить это...