简体   繁体   English

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

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

well I have made this program to insert new values in SQL db,by choosing between different tables from combo box.I need to change the sql query by which I can use insert command individually for each table in combo box...the area where i need help is in bold ... 好吧,我已经让这个程序在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);
        }
    }
}

After going through the source, I understand what you are trying to accomplish. 通过源代码后,我了解您要完成的任务。 I will give my answer your problem first, but please read the recommendations after the answer because proceeding in the way you are onto now this application may end up as a big headache to whoever is going to maintain it. 我会首先回答你的问题,但请在回答后阅读建议,因为按照你现在的方式进行,这个应用程序最终可能会成为维护它的人的头痛。

Answer : 答案

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;

Now in your PopulateGridView function you can change the sqlQuery to 现在在PopulateGridView函数中,您可以将sqlQuery更改为

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

then in your InsertInfo function you can do the following (at the location where you are defining the string sql variable): 然后在您的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;
}

Recommendations : 建议

  1. Please change your vanilla string queries to stored procedures or look into LINQ 请将您的vanilla字符串查询更改为存储过程或查看LINQ
  2. Do not use select * , always try to mention the column names in a select query 不要使用select * ,总是尝试在select查询中提及列名
  3. Provide a more user friendly name in the combobox than the table name, it is not always safe to make the table names so obvious to the end user 在组合框中提供比表名更友好的名称,使表名对最终用户如此明显并不总是安全的
  4. Try using a separate data access layer and move the database specific codes into that layer 尝试使用单独的数据访问层并将特定于数据库的代码移动到该层中

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

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