下拉插入问题

Dropdown insert issue

我正在为我的期末项目创建一个网络表单。我正在研究一个非常基本的幻想联盟。

我有一个页面,允许用户从每个位置的下拉列表中 select 11 名球员,然后将他们插入数据库。当我点击页面底部的提交时,它应该将每个下拉列表中的文本插入到数据库中。

现在,当我尝试将下拉列表的文本插入数据库时​​,它向我显示此错误:

Invalid column name 'Courtois'.

不过,库尔图瓦是守门员下拉菜单中的文字。

protected void btnConfirm_Click(object sender, EventArgs e)
{

   string query = "INSERT into userPicks (Name) values ("+ ddlKeeper.Text + ")";
   SqlConnection conn = new SqlConnection(cs);

   SqlCommand cmd = new SqlCommand(query, conn);
   conn.Open();
   int rowsInserted = cmd.ExecuteNonQuery();

   if (rowsInserted > 0)
   {
      Response.Write("Data inserted successfully");
   }
   else
   {
      Response.Write("Data was not inserted into database");
   }
}

if语句只是为了测试数据是否被插入

我已经尝试对我需要插入的值进行硬编码,而且效果很好。

我想这可能是我尝试将数据插入数据库的语法错误或方法错误。

这是我从单独的数据库中调出球员姓名的代码:

protected void Page_Load(object sender, EventArgs e)
{
   DataSet gk = new DataSet();

   SqlConnection conn = new SqlConnection(cs);
   conn.Open();

   SqlCommand cmdgk = new SqlCommand("Select name FROM Players WHERE position='gk'", conn);

   SqlDataAdapter adpgk = new SqlDataAdapter(cmdgk);

   adpgk.Fill(gk);
   ddlKeeper.DataSource=gk;
   ddlKeeper.DataValueField = "Name";
   ddlKeeper.DataBind();

}

试试这个 -

string query = "INSERT into userPicks (Name) values ('"+ ddlGK.Text + "')";

更好的方法是使用参数化查询。搜索参数化查询,您应该会找到大量示例。

在 sql 查询中使用时,字符串值应括在单引号中。然而,执行插入查询的正确方法是使用像这样的参数化查询

protected void btnConfirm_Click(object sender, EventArgs e)
{

   string query = "INSERT into userPicks (Name) values (@name)";
   using (SqlConnection conn = new SqlConnection(cs))
   using (SqlCommand cmd = new SqlCommand(query, conn))
   {
       conn.Open();
       cmd.Parameters.Add("@name", SqlDbType.NVarWChar).Value = ddlGK.Text; 
       int rowsInserted = cmd.ExecuteNonQuery();
       if (rowsInserted > 0)
       {
            Response.Write("Data inserted successfully");
       }
       else
       {
            Response.Write("Data was not inserted into database");
       }
    }
}

参数化查询始终是正确的方法。如果您的输入包含单引号(而不是字符串连接,您的查询将因语法错误而失败),您无需担心,但最重要的是您的代码将没有 Sql Injection hacks

顺便说一句,您使用 MySql 标记您的问题,但您的代码使用适用于 Sql 服务器的 Sql 客户端 类。