3

コンボボックスから異なるテーブルを選択して、SQL dbに新しい値を挿入するようにこのプログラムを作成しました。コンボボックスの各テーブルに対して個別に挿入コマンドを使用できるSQLクエリを変更する必要があります...太字は助けが必要です...

namespace combo
{
    public partial class Form1 : Form
    {
        List lstNewRows = new List();

        public Form1()
        {
            InitializeComponent();
        }
        private void PopulateComboBox()
        {
            try
            {

                List _items = new List();

                _items.Add("select * from lol");
                _items.Add("select * from datejoin");
                comboBox1.DataSource = _items;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            PopulateComboBox();
        }

        private void PopulateGridView(string connString, string sqlQuery)
        {

            String strconnetcion = connString;

            SqlConnection con = new SqlConnection(strconnetcion);



            try
            {

                con.Open();

                SqlCommand sqlCmd = new SqlCommand();

                sqlCmd.Connection = con;
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.CommandText = sqlQuery;

                SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);

                DataTable dtRecord = new DataTable();
                sqlDataAdap.Fill(dtRecord);

                dataGridView1.DataSource = dtRecord;
                dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedValue != null)
            {
                PopulateGridView(textBox1.Text, comboBox1.SelectedValue.ToString());
            }
        }

        private void InsertInfo()
        {

            string connectionString = null;
            SqlConnection connection;
            SqlDataAdapter adapter = new SqlDataAdapter();
            string value1 = "";
            string value2 = "";
            connectionString = @"Data Source=HP\SQLEXPRESS;database=MK;Integrated Security=true";
            connection = new SqlConnection(connectionString);
            foreach (int rowIndex in lstNewRows)
            {
                if (dataGridView1.Rows[rowIndex].Cells[0].Value != null && dataGridView1.Rows[rowIndex].Cells[1].Value != null)
                {

                    value1 = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString();
                    value2 = dataGridView1.Rows[rowIndex].Cells[1].Value.ToString();
                    ***string sql = "insert into lol (name,marks) values('" + value1 + "','" + value2 + "')";***
                    try
                    {
                        connection.Open();
                        adapter.InsertCommand = new SqlCommand(sql, connection);
                        adapter.InsertCommand.ExecuteNonQuery();
                        MessageBox.Show("Row inserted !! ");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }

                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {


            InsertInfo();

        }

        private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
        {
            lstNewRows.Add(e.Row.Index);
        }
    }
}
4

1 に答える 1

2

ソースを調べた後、私はあなたが達成しようとしていることを理解しています。私は最初にあなたの問題に答えますが、あなたが今進んでいる方法でこのアプリケーションを進めると、それを維持しようとしている人にとって大きな頭痛の種になる可能性があるため、答えの後に推奨事項を読んでください。

回答

Change your items to be as follows:
List _items = new List();
_items.Add("lol"); // removing select * from 
_items.Add("datejoin"); // removing select * from 
comboBox1.DataSource = _items;

これで、関数でを次のようにPopulateGridView変更できます。sqlQuery

private void PopulateGridView(string connString, string sqlQuery) {
    sqlQuery = "select * from "+sqlQuery;

次に、InsertInfo関数で次のことを実行できます(文字列sql変数を定義している場所で)。

string sql = string.Empty;
switch(comboBox1.SelectedValue) {
    case "lol":
        sql = "insert into lol (name,marks) values('" + value1 + "','" + value2 + "')";
        break;
    case "datejoin":
        sql = "insert into datejoin (..."; // fill in the column and values as needed
        break;
}

推奨事項

  1. バニラ文字列クエリをストアドプロシージャに変更するか、LINQを調べてください
  2. を使用しないでくださいselect *。常にselectクエリで列名を指定するようにしてください
  3. コンボボックスにテーブル名よりもわかりやすい名前を付けてください。エンドユーザーにテーブル名をわかりやすくすることは必ずしも安全ではありません。
  4. 別のデータアクセス層を使用して、データベース固有のコードをその層に移動してみてください
于 2013-03-08T09:40:29.057 に答える