C# 从用户在asp.net c中输入的数据向SQL Server数据库添加行#

C# 从用户在asp.net c中输入的数据向SQL Server数据库添加行#,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我经常遇到的错误是运行时说 “-”附近的语法不正确。“-”附近的语法不正确 我使用try-catch只是为了加载页面并显示我的分数,但是标签上也显示了这种不正确的语法,我想知道是否有人可以帮助我解决我的错误 谢谢。我想surname打断了你的提问。使用方括号,如[Sur Name] 但更重要的是,请使用。这种类型的字符串连接对攻击是开放的。我看到您尝试使用,但从未在查询中声明参数名称 此外,数据可能是SQL Server未来版本中的一个重要问题。您可能还需要与一起使用,例如[DATA] 考虑使用

我经常遇到的错误是运行时说

“-”附近的语法不正确。“-”附近的语法不正确

我使用try-catch只是为了加载页面并显示我的分数,但是标签上也显示了这种不正确的语法,我想知道是否有人可以帮助我解决我的错误


谢谢。

我想
surname
打断了你的提问。使用方括号,如
[Sur Name]

但更重要的是,请使用。这种类型的字符串连接对攻击是开放的。我看到您尝试使用,但从未在查询中声明参数名称

此外,
数据
可能是SQL Server未来版本中的一个重要问题。您可能还需要与一起使用,例如
[DATA]

考虑使用来处理
SqlConnection
SqlCommand

string ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(ConnectionString);

SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, Sur-Name, Score,Avg) VALUES ('" + fName + "','" + sName + "','" + lblScore.Text + "','" + lblAvg.Text + "');");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@Name", fName);
cmd.Parameters.AddWithValue("@Sur-Name", sName);
cmd.Parameters.AddWithValue("@Score", lblScore.Text);
cmd.Parameters.AddWithValue("@Avg", lblAvg.Text);

try
{
    connection.Open();
    cmd.ExecuteNonQuery();
}
catch (Exception exc)
{
    lblData.Text = exc.Message;              
}
finally
{
    connection.Close();
}

我认为
surname
打破了你的疑问。使用方括号,如
[Sur Name]

但更重要的是,请使用。这种类型的字符串连接对攻击是开放的。我看到您尝试使用,但从未在查询中声明参数名称

此外,
数据
可能是SQL Server未来版本中的一个重要问题。您可能还需要与一起使用,例如
[DATA]

考虑使用来处理
SqlConnection
SqlCommand

string ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(ConnectionString);

SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, Sur-Name, Score,Avg) VALUES ('" + fName + "','" + sName + "','" + lblScore.Text + "','" + lblAvg.Text + "');");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@Name", fName);
cmd.Parameters.AddWithValue("@Sur-Name", sName);
cmd.Parameters.AddWithValue("@Score", lblScore.Text);
cmd.Parameters.AddWithValue("@Avg", lblAvg.Text);

try
{
    connection.Open();
    cmd.ExecuteNonQuery();
}
catch (Exception exc)
{
    lblData.Text = exc.Message;              
}
finally
{
    connection.Close();
}

您正在尝试将串联查询与参数化查询混合使用。始终使用参数化查询,这样可以避免SQL注入

using(SqlConnection connection = new SqlConnection(ConnectionString))
using(SqlCommand cmd = connection.CreateCommand())
{
   cmd.CommandText = @"INSERT INTO [Data] (Name, [Sur-Name], Score, Avg)
                       VALUES (@Name, @SurName, @Score, @Avg)";
   cmd.Connection = connection;
   cmd.Parameters.AddWithValue("@Name", fName);
   cmd.Parameters.AddWithValue("@SurName", sName);
   cmd.Parameters.AddWithValue("@Score", lblScore.Text);
   cmd.Parameters.AddWithValue("@Avg", lblAvg.Text);

   try
   {
        connection.Open();
        cmd.ExecuteNonQuery();
   }
   catch (Exception exc)
   {
        lblData.Text = exc.Message;
   }     
}

也可以考虑使用语句在<代码>中包含连接和命令对象。


正如@Soner在中提到的,使用方括号表示
数据
Sur Name

您试图将串联查询与参数化查询混合使用。始终使用参数化查询,这样可以避免SQL注入

using(SqlConnection connection = new SqlConnection(ConnectionString))
using(SqlCommand cmd = connection.CreateCommand())
{
   cmd.CommandText = @"INSERT INTO [Data] (Name, [Sur-Name], Score, Avg)
                       VALUES (@Name, @SurName, @Score, @Avg)";
   cmd.Connection = connection;
   cmd.Parameters.AddWithValue("@Name", fName);
   cmd.Parameters.AddWithValue("@SurName", sName);
   cmd.Parameters.AddWithValue("@Score", lblScore.Text);
   cmd.Parameters.AddWithValue("@Avg", lblAvg.Text);

   try
   {
        connection.Open();
        cmd.ExecuteNonQuery();
   }
   catch (Exception exc)
   {
        lblData.Text = exc.Message;
   }     
}

也可以考虑使用语句在<代码>中包含连接和命令对象。 正如@Soner在中提到的,使用方括号表示

数据
Sur Name