为什么数据没有保存到数据库?

时间:2013-12-08 12:08:35

标签: c# asp.net database

我已尝试将以下代码保存到数据库中。条件是,我在下拉列表中有一个值,值为New = 1,old = 2。如果用户选择1或新,则它将数据保存到数据库,或者如果他们选择旧,则它将显示存在的数据。

现在这次我的标签显示已插入数据,但数据未保存到表格中(但未显示任何错误)。

 protected void btnsave_Click(object sender, EventArgs e)
        {
            if (ddl.Text=="1")
            {
                cs.Open();
                string query = "insert into resig (@id,@name,@email) values('"+txtgn.Text+"','"+txtgname.Text+"','"+txtsg.Text+"')";
                SqlCommand cmd = new SqlCommand(query,cs);
                lbdmsg.Text = "Data Inserted";

                //txtgname.Text = ddl.SelectedItem.ToString();

            }
            else
            {
                cs.Open();
                string query = "select name, email from resig where id='" + txtgn + "'";
                SqlCommand cmd= new SqlCommand(query,cs);
                dr =cmd.ExecuteReader();
                while(dr.Read())
                {
                    string name= txtgname.Text;
                    string email=txtsg.Text;
                }
                cs.Close();
            }
        }

3 个答案:

答案 0 :(得分:3)

我看到两件事;

  • 您尝试参数化列名,而不是您的值。
  • 您没有使用ExecuteNonQuery()执行插入命令。

您应该使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

例如;

if (ddl.Text == "1")
{
    string query = "insert into resig (id,name,email) values(@id, @name, @email)";
    SqlCommand cmd = new SqlCommand(query,cs);
    cmd.Parameters.AddWithValue("@id", txtgn.Text);
    cmd.Parameters.AddWithValue("@name", txtgname.Text);
    cmd.Parameters.AddWithValue("@email", txtsg.Text);
    cs.Open();
    cmd.ExecuteNonQuery();
}

答案 1 :(得分:1)

调用cmd.ExecuteNonQuery()在db上运行命令

答案 2 :(得分:1)

您的SQL既错误又非常危险/易受SQL注入攻击。括号中的第一个列表必须是列列表,值列表应该是避免SQL注入的参数:

string query = "insert into resig (id, name, email) values(@id, @name, @email)";
SqlCommand cmd = new SqlCommand(query, cs);
cmd.Parameters.Add(new SqlParameter("@id", txtgn.Text));
cmd.Parameters.Add(new SqlParameter("@name", txtgname.Text));
cmd.Parameters.Add(new SqlParameter("@email", txtsg.Text));
cmd.ExecuteNonQuery();

您也应该参数化select语句。为什么这很重要?如果用户为id输入了此ID并选择了旧的SQL,请考虑生成的SQL:

';删除resig; -

通过连接用户输入来构建SQL会打开您的数据库,让用户心怀异想,并且永远不应该使用这个时代。无数网站遭到破坏,数据被破坏 - 当天回想起来,但现在我们知道的更好了,没有任何借口。