繁体   English   中英

通过从组合框中选择不同的表,在sql db..中插入新值

[英]to insert new values in sql db..by selecting different tables from combo box

好吧,我已经让这个程序在SQL db中插入新的值,通过在组合框中的不同表之间进行选择。我需要更改sql查询,通过该查询,我可以单独为组合框中的每个表使用insert命令...我需要帮助是大胆的...

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);
        }
    }
}

通过源代码后,我了解您要完成的任务。 我会首先回答你的问题,但请在回答后阅读建议,因为按照你现在的方式进行,这个应用程序最终可能会成为维护它的人的头痛。

答案

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. 请将您的vanilla字符串查询更改为存储过程或查看LINQ
  2. 不要使用select * ,总是尝试在select查询中提及列名
  3. 在组合框中提供比表名更友好的名称,使表名对最终用户如此明显并不总是安全的
  4. 尝试使用单独的数据访问层并将特定于数据库的代码移动到该层中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM