sql命令字符串可以使其连接



我一直在为按钮创建一个类,您可以从表的数据库中添加和删除行,但是这是我第一次串联一个字符串,我怀疑它是不起作用的到命令文本。

 public static void deleteButton(string databaseName, string IDname, DataGridView dgv)
    {
        Helper.openConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = Helper.cn;
        string IDLocation = dgv.SelectedRows[0].Cells[0].Value.ToString();
        cmd.CommandText = "delete from " + databaseName + " where " + IDname + " = " + IDLocation;
        Helper.cn.Close();
        MessageBox.Show("Successfully Deleted!");
    }
    public static void addButton(string databaseName, List<string> values, DataGridView dgv, bool isAdd)
    {
        Helper.openConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = Helper.cn;
        string message = isAdd == true? "Sucessfully Added" : "Sucessfully Edited";
        string command = "insert into " + databaseName + " values(";
        for (int i = 0; i < values.Count; i++)
        {
            command += values[i];
            if(i != values.Count - 1) command += ", ";
        }
        command += ")";
        cmd.CommandText = command;
        MessageBox.Show(message);
        Helper.cn.Close();
    }

谢谢您的时间帮助我。

两个问题:

  1. 您正在使用INSERT INTO [databaseName]。那应该是INSERT INTO [tableName]。这就是为什么它不起作用。
  2. 不要将值连接到SQL text中。它为SQL注入打开了大门,也使SQL Server更难重复使用查询计划。而是使用查询参数。文档中有一个示例。

我会把设计留给您,然后尝试回答问题。您实际上是否看过命令文字?您是否尝试将命令文本粘贴到查询中并手动运行?您需要引用字符串值。您的功能和查询使用" databasename"。这应该是表名而不是数据库名称。

这里的评论全都在目标上,但是代码的关键问题是您什么都没做。您已经打开了连接,声明为sql命令,但是您不执行它。

是的,是的,使用参数,但是如果您希望您的SQL工作,则需要执行它:

string IDLocation = dgv.SelectedRows[0].Cells[0].Value.ToString();
cmd.CommandText = string.Format("delete from {0} where IDname = @ID", databaseName);
cmd.Parameters.AddWithValue("@ID", IDLocation);

注意,即使在非数字数据类型上,您也不需要引号或任何内容。

和晚上的功能,缺少链接:

cmd.ExecuteNonQuery();

插入查询也是如此 - 确保运行执行方法并使用参数!

相关内容

最新更新