1

データベースを調べてユーザーの名前を表示するコンボボックスがあります。それ以外にdIDも調べたいのですが、このタスクを実行するのは難しいと感じています。2つのテーブルがあるので、このSQLステートメントを繰り返す必要があると思います。このコードを調べてください!

全体として、私が達成したいのは、データベースからユーザーを削除することです。メンバーの個人情報フォームtable_1と、メンバーの支払額と年のdIDに関する情報がtable_2を形成します。1つの削除コマンドは、table_1とtable_2のメンバー情報の1つの行を削除します。

他の方法やアイデアは大歓迎です!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CemiyetAidatSistem
{
    public partial class DeleteUser : Form
    {
        String conStr ="My connection string";
        public UyeSil()
        {
            InitializeComponent();
        }
        SqlDataAdapter da;
        DataSet ds = new DataSet();
        private void UserDelete_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(conStr);
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT FullName FROM Members";
            da = new SqlDataAdapter(cmd);
            da.Fill(ds, "Members");
            cmbUyeSil.DataSource = ds.Tables["Members"];
            cmbUyeSil.DisplayMember = "DistinctID";
            cmbUyeSil.ValueMember = "FullName";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(conStr);
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "DELETE FROM Members WHERE ID = '" + cmbUyeSil.SelectedValue + "'";
            da = new SqlDataAdapter(cmd);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            MessageBox.Show(" Member with dID \"" + cmbUyeSil.SelectedValue + "\"is deleted");

        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}
4

2 に答える 2

1

カスケード削除をオンにしている場合、ユーザーを削除すると、表2の行も削除されます。

于 2012-12-21T19:56:04.067 に答える
0

OK、belxandre は完全に正しいです。これらのレコードは削除しないでください。それらを非アクティブまたは何かとマークする機能が必要です。そうは言っても、削除を行う SqlCommand を作成し、必要なパラメーターを追加して、DataAdapter で呼び出すことができます。

SqlCommand delcomm = new SqlCommand();
delcomm.CommandType = CommandType.StoredProcedure; //I'd do it with an sp, up to you
delcomm.CommandText = "sp_delUser";
SqlParameter delParam = new SqlParameter("@dID", SqlDbType.Int);//I'm assuming this is the column you need and the right datatype
delcomm.Parameters.Add(delParam);
da.DeleteCommand = delcomm;
da.AcceptChangesDuringUpdate = false;
da.Update(UserTable);//you'll need to set up a DataTable with the right data structure
UserTable.AcceptChanges();

これは私の頭の中で完全に外れています。あなたはこれを少しいじる必要があるかもしれませんが、私があなたの質問を理解していれば、それは一般的にあなたがする必要があることです. 提案されているように、テーブルでカスケード削除を行うこともお勧めです。

于 2012-12-21T20:23:56.460 に答える