下拉插入问题
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 客户端 类。
我正在为我的期末项目创建一个网络表单。我正在研究一个非常基本的幻想联盟。
我有一个页面,允许用户从每个位置的下拉列表中 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 客户端 类。