Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 靠近'的语法不正确;系统&x27;。字符串'';_C#_Asp.net - Fatal编程技术网

C# 靠近'的语法不正确;系统&x27;。字符串'';

C# 靠近'的语法不正确;系统&x27;。字符串'';,c#,asp.net,C#,Asp.net,嗨,伙计们,当我加载页面时,重置按钮按预期工作,但当我尝试更新信息按钮时,会出现错误消息 遇到的问题:“系统”附近的语法不正确。字符串“”后的未闭合引号。错误在于update语句中缺少闭合引号 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.D

嗨,伙计们,当我加载页面时,重置按钮按预期工作,但当我尝试更新信息按钮时,会出现错误消息
遇到的问题:“系统”附近的语法不正确。字符串“”后的未闭合引号。

错误在于update语句中缺少闭合引号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class Editprofile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString;

            string sql = "select userid from Profile";
            SqlCommand cmd = new SqlCommand();
            SqlDataReader dr;
            DataTable dt = new DataTable();

            cmd.CommandText = sql;
            cmd.Connection = con;

            con.Open();
            dr = cmd.ExecuteReader();
            dt.Load(dr);
            ddl_userid.DataSource = dt;
            ddl_userid.DataTextField = "userid";
            ddl_userid.DataValueField = "userid";
            ddl_userid.DataBind();
        }
    }
    protected void ddl_userid_SelectedIndexChanged(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString;

        string sql = "Select studname,gender,email,birthdate,contact from profile where userid='" + ddl_userid.SelectedValue + "'";
        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr;
        DataTable dt = new DataTable();

        cmd.CommandText = sql;
        cmd.Connection = con;

        con.Open();
        dr = cmd.ExecuteReader();

        dt.Load(dr);

        tb_studname.Text = dt.Rows[0]["studname"].ToString();
        tb_gender.Text = dt.Rows[0]["gender"].ToString();
        tb_email.Text = dt.Rows[0]["email"].ToString();
        tb_age.Text = dt.Rows[0]["birthdate"].ToString();
        tb_contact.Text = dt.Rows[0]["contact"].ToString();
        Session["dt"] = dt;
    }
    protected void bn_reset_Click(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)Session["dt"];
        tb_studname.Text = dt.Rows[0]["studname"].ToString();
        tb_gender.Text = dt.Rows[0]["gender"].ToString();
        tb_email.Text = dt.Rows[0]["email"].ToString();
        tb_age.Text = dt.Rows[0]["birthdate"].ToString();
        tb_contact.Text = dt.Rows[0]["contact"].ToString();

    }
    protected void bn_update_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString;

        String name = tb_studname.Text;
        String gender = tb_gender.Text;
        String email = tb_email.Text;
        String age = tb_age.Text;
        String contact = tb_contact.Text;

        string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact; 
        sql=sql +"where userid='"+ddl_userid+"'";

        SqlCommand cmd =new SqlCommand();
        cmd.CommandText=sql;
        cmd.Connection=con;
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            lbl_msg.Text="Record Updated!";
        }
        catch(Exception ex)
        {
            lbl_msg.Text="Problem encountered:"+ex.Message;

        }
        finally
        {
            con.Close();
            con.Dispose();
            cmd.Dispose();
        }


    }
}
也就是说,您应该删除所有这些字符串连接并使用参数化查询

有太多的点需要修复,我只是为更新显示一个建议的修复

 string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+
            email+"',birthdate='"+age+"',contact='"+contact +"'"; 
这样,您的命令字符串更具可读性,避免了细微的引用错误。

此外,引用参数的工作将传递给框架代码,不可能进行SQL注入。

问题如下:

  string sql="Update Profile Set studName=@name,gender=@gender,email=@email," + 
             "birthdate=@age,contact=@contact where userid=@uid";

   SqlCommand cmd =new SqlCommand();
   cmd.CommandText = sql;
   cmd.Parameters.AddWithValue("@name",name);
   cmd.Parameters.AddWithValue("@gender",gender);
   cmd.Parameters.AddWithValue("@email",email);
   cmd.Parameters.AddWithValue("@age",age);
   cmd.Parameters.AddWithValue("@contact",contact);
   cmd.Parameters.AddWithValue("@uid",ddl_userid);
   cmd.ExecuteNonQuery();
您需要按如下方式完成字符串:请参见我已编辑语句结尾

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact;
注意:我建议您使用参数化查询,而不是直接生成字符串。

更改:

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact +"' ";
致:


联系后缺少单个报价。然后,您需要一个空格,以便下一行添加Where子句有效。

我认为这一行的问题

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact + "' ";
但请不要用这种方式。改用。这种类型的字符串连接对攻击是开放的

另外,使用参数化查询可以提高可读性

比如,

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',
contact='"+contact;
                 ^^ here missing '"
sql=sql +"where userid='"+ddl_userid+"'";

具体在哪一行?您的
userid
列的类型是什么,以及
ddl\u userid.SelectedValue
的值是什么?请注意SQL注入攻击。-您不应该将SQL语句连接在一起-而是使用参数化查询来避免SQLinjection@SonerGönül userid是nvarchar(50),那么ddl_userid的值是什么意思呢,您遇到的语法错误听起来像是连接sql语句时发生的常见错误。使用Sql参数将自动处理特殊字符,包括引号。这个问题似乎是离题的,因为它是关于代码检查感谢它工作的帮助感谢它工作得很好!谢谢大家,但不要担心攻击,这只是一个有贝金纳c#knowledge的基础学校项目@雪瑞兹:特别是如果你是一个学习者,你应该学会正确的方法!不要学那种蹩脚的、下流的方法——那你就一辈子都在这样做!现在就努力学习如何正确地做到这一点——一劳永逸@mark_s我同意你关于正确方法的看法,但实际问题是代码出了什么问题,而不是编码技术出了什么问题。
string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',
contact='"+contact;
                 ^^ here missing '"
sql=sql +"where userid='"+ddl_userid+"'";
string sql = @"Update Profile Set studName=@studName,gender=@gender,email=@email, birthdate=@birthdate, contact=@contact 
               where userid=@userid";
SqlCommand cmd =new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@studName", studName);
cmd.Parameters.AddWithValue("@gender", gender);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@birthdate", birthdate);
cmd.Parameters.AddWithValue("@contact", contact);
cmd.Parameters.AddWithValue("@userid", userid);
cmd.ExecuteNonQuery();