插入查询,其中表名为文本框文本

本文关键字:文本 查询 插入 | 更新日期: 2023-09-27 18:17:16

我有一个问题,在button1点击事件插入数据到一个表,表名是由任何文本在textbox1

应该是这样的意思:

tablename = textbox1.text;
sql = "INSERT INTO tablename ([itemserial], [itemname], [itemcount],[itemimage]) VALUES (@itemserial, @itemname, @itemcount, @itemimage)";

插入查询,其中表名为文本框文本

使用一个包含表名的文本框是很有挑战性的,因为在处理这个值时应该格外小心。您应该对这个文本框的值执行某种检查。一种可能的解决方案是根据数据库模式检查用户键入的表是否确实存在。

你没有告诉我们你使用的是哪个数据库系统,所以我将展示一个使用Sql Server的例子

string tableName = textbox1.text;
using(SqlConnection cnn = new SqlConnection(... connectionstring...))
{
    cnn.Open();
    DataTable dt = cnn.GetSchema("TABLES");
    DataRow[] rows = dt.Select("TABLE_NAME = '" + tableName + "'");
    if(rows.Length > 0)
    {
        // Now you are sure to have a valid table in your textbox
        // and could use the input value without risking an Sql Injection
        string sql = "INSERT INTO [" + tableName + "] ([itemserial]," + 
                     "[itemname],[itemcount],[itemimage]) " + 
                     "VALUES(@itemserial,@itemname,@itemcount,@itemimage)";
        .... the remainder of your code that use the query above....
    }
    else
        MessageBox.Show("Please enter a valid name for your table");

扩展这种方法,你可以将你的TextBox更改为ComboBox, ComboBoxStyle设置为DropDownList(以阻止输入),并用上面的GetSchema调用返回的名称填充ComboBox ....

tablename = textbox1.text;
sql = string.Format("INSERT INTO {0} ([itemserial],[itemname],[itemcount],[itemimage])VALUES(@itemserial,@itemname,@itemcount,@itemimage)", tablename);

尽管我强烈建议不要这样做,因为它允许人们在文本框中输入任何他们想要的东西。比如:

罗伯特;——

在这里有更详细的讨论:如何从"Bobby tables"中注入SQL ?XKCD漫画作品?

像这样修改你的查询

sql = "INSERT INTO "+tablename+" ([itemserial],[itemname],[itemcount],[itemimage]) VALUES (@itemserial,@itemname,@itemcount,@itemimage)";