【问题标题】:run SQL Commands from text box value从文本框值运行 SQL 命令
【发布时间】:2019-07-13 07:27:31
【问题描述】:

我创建了一个从 sqlserver 读取数据然后插入 mysql 表的小项目。 我希望用户将 SQL 和 mysql 命令写入文本框。

这是我的问题,当我运行项目时,插入 mysql 表的字段是:myReader["STableName"].ToString()

喜欢这张照片:

连接很好,这是我的代码:

            string address;
            string username;
            string password;
            string database;
            address = textBox1.Text;
            username = textBox2.Text;
            password = textBox3.Text;
            database = textBox4.Text;


            //MySql
            string mysqladdress;
            string mysqlusername;
            string mysqlpassword;
            string mysqldatabase;
            mysqladdress = textBox7.Text;
            mysqlusername = textBox8.Text;
            mysqlpassword = textBox9.Text;
            mysqldatabase = textBox10.Text;

            //SQLCode 
            string sqlcmnd1;
            string sqlcmnd2;
            sqlcmnd1 = textBox5.Text;
            sqlcmnd2 = textBox6.Text;


            SqlConnection conn = new SqlConnection();
            conn.ConnectionString =
            "Data Source=" + address + ";" +
            "Initial Catalog=" + database + ";" +
            "User id=" + username + ";" +
            "Password=" + password + ";";
            try
            {
                conn.Open();       
                SqlDataReader myReader = null;
                SqlCommand myCommand = new SqlCommand(sqlcmnd1, conn);
                myReader = myCommand.ExecuteReader();    
                while (myReader.Read())
                {
                    string connectionString = @"server=" + mysqladdress + ";" + "username=" + mysqlusername + ";" + "password=" + mysqlpassword + ";" + "database=" + mysqldatabase + "";
                    MySqlConnection connection = null;
                    MySqlDataReader reader = null;
                    try
                    {
                        connection = new MySqlConnection(connectionString);
                        connection.Open();
                        string stm = sqlcmnd2;//here is my problem
                        MySqlDataAdapter dataAdapter = new MySqlDataAdapter();
                        dataAdapter.SelectCommand = new MySqlCommand(stm, connection);
                        DataTable table = new DataTable();
                        dataAdapter.Fill(table);
                    }

sqlcmnd2:

INSERT INTO test (CusCode,STableName,Date,ModdatZaman) VALUES ('" + myReader["CusCode"].ToString() + "','" + myReader["STableName"].ToString() + "','" + myReader["Date"].ToString() + "','" + myReader["ModdatZaman"].ToString() + "')

sqlcmnd1:

SELECT * FROM __TempUserCompRep__

【问题讨论】:

  • 如果你不显示你填充的变量 sqlcmnd2 是不可能理解这里发生了什么。可能是字符串连接错误而不是使用参数的情况。
  • @Steve 谢谢你,我编辑了文章。请再检查一遍。
  • 然后您将该字符串键入文本框中,希望“myReader”文字文本成为对 myReader 变量的引用?这不会发生
  • @Steve 它可以在不将 sql 命令放入文本框的情况下工作,我如何使用文本框做到这一点?
  • 在文本框中写入 INSERT INTO test (CusCode,STableName,Date,ModdatZaman) VALUES (@cidcode,@table,@date) 在您的代码中创建三个参数以上名称并从 myReader 变量中设置它们的值。但是请记住,这种方法是灾难的根源。您的用户可以输入任何内容。甚至 DROP 数据库 并且您将没有更多的数据库可以使用

标签: c# mysql


【解决方案1】:

文本框中的文本被视为完整字符串,它不会替换变量的实际值。

您需要为此使用准备好的语句。

在 textbox6 中你可以这样写命令:

INSERT INTO test (CusCode,STableName,Date,ModdatZaman) VALUES (@CusCode,@STableName,@Date,@ModdatZaman)

在代码中,将参数与您实际要取值的变量绑定。

例如:

      MySqlConnection con = null;
        try
        {
            string myConnectionString = "server=localhost;database=test;uid=root;pwd=root;";

                con = new MySqlConnection(myConnectionString);

                string CmdString = textBox6.Text.ToString();
                MySqlCommand cmd = new MySqlCommand(CmdString, con);
                 cmd.Parameters.Add("@CusCode", MySqlDbType.VarChar, 50);
                 cmd.Parameters.Add("@STableName", MySqlDbType.VarChar, 50);
                 cmd.Parameters.Add("@Date", MySqlDbType.VarChar, 50);
                 cmd.Parameters.Add("@ModdatZaman", MySqlDbType.VarChar, 50);
                 cmd.Parameters["@CusCode"].Value = myReader["CusCode"].ToString();
                 cmd.Parameters["@STableName"].Value = myReader["STableName"].ToString();
                 cmd.Parameters["@Date"].Value = myReader["Date"].ToString();
                 cmd.Parameters["@ModdatZaman"].Value = myReader["ModdatZaman"].ToString();

                con.Open();
                int RowsAffected = cmd.ExecuteNonQuery();
                if (RowsAffected > 0)
                {
                    MessageBox.Show("Insert Query sucessfully!");
                }


        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (con != null && con.State == ConnectionState.Open)
            {
                con.Close();
            }
        }

注意:我认为数据库中的所有四列都是 varchar 类型。你根据你的要求修改它

【讨论】:

    【解决方案2】:

    你好 Muhammad,我建议你不要从文本框中执行 sql 命令,因为很有可能 sql 注入攻击,尽量避免,这是对更安全的应用程序的建议

    【讨论】:

    • 谢谢先生,我只使用本地数据库中的这个表格
    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2011-10-07
    • 2016-05-26
    • 2018-10-05
    • 2020-03-15
    相关资源
    最近更新 更多