';附近的语法不正确';-C#

';附近的语法不正确';-C#,c#,C#,当我尝试运行下面的代码时,出现了一个错误。可能是什么问题 protected void Button1_Click(object sender, EventArgs e) { SqlConnection cnn = new SqlConnection("server=.; database=YEDEK; Integrated Security=True; "); cnn.Open(); SqlCommand cmd = cnn.CreateCom

当我尝试运行下面的代码时,出现了一个错误。可能是什么问题

protected void Button1_Click(object sender, EventArgs e)
 {
        SqlConnection cnn = new SqlConnection("server=.; database=YEDEK; Integrated Security=True; ");
        cnn.Open();
        SqlCommand cmd = cnn.CreateCommand();
        cmd.CommandText = "insert Personel (Name,Surname,Tel) values  ('"+txtName.Text+"','"+ txtSurname.Text+"','"+txtTel.Text+"')  ";
        SqlParameter p1 = new SqlParameter("txtName.Text", SqlDbType.NVarChar);
        p1.Value = "txtName.Text";
        cmd.Parameters.Add(p1);
        SqlParameter p2 = new SqlParameter("txtSurname.Text", SqlDbType.NVarChar);
        p2.Value = "txtSurname.Text";
        cmd.Parameters.Add(p2);
        SqlParameter p3 = new SqlParameter("txtTel.Text", SqlDbType.Char);
        p3.Value = "txtTel.Text";
        cmd.Parameters.Add(p3);
        cmd.ExecuteNonQuery();
        cnn.Close();

 } 
以下是我的错误消息:

 Incorrect syntax near '.'.
 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
 Exception Details:  System.Data.SqlClient.SqlException: Incorrect syntax near '.'.

 Source Error: 

 Line 44:             //cmd.Parameters.Add(p3);
 Line 45: 
 Line 46:             cmd.ExecuteNonQuery();
 Line 47:         //} 
 Line 48:         //catch (SqlException ex)

您的参数语法不正确

适当的参数如下所示:

 new SqlParameter("@SomeParamName", SqlDbType.VarChar)
看起来您正试图将控件中的值直接插入到参数中。在这种情况下,您可以这样做:

  var param = new SqlParameter("@Name", SqlDbType.VarChar);
  param.Value = txtName.Text;

参数名称应与存储过程定义匹配

cmd.CommandText=“插入个人(姓名、姓氏、电话)值(@Name、姓氏、电话)”


看起来更符合逻辑,您必须确保sommand参数也与变量名匹配。

Tejs正确无误,请从参数名中删除点

您还应该将insert语句更改为(我也删除了点)


请重命名这些参数,它们的名称不正确

您应该使用SqlParameter或连接字符串。前者更好,因为它可以防止SQL注入攻击。另外,不要引用正在使用的控件的属性(如p1.Value=“txtName.Text”)

以下是如何以正确的方式完成:

    SqlConnection cnn = new SqlConnection("server=.; database=YEDEK; Integrated Security=True; ");
    cnn.Open();
    SqlCommand cmd = cnn.CreateCommand();
    cmd.CommandText = "INSERT INTO Personel (Name, Surname, Tel) VALUES  (@Name, @Surname, @Tel)  ";
    SqlParameter p1 = new SqlParameter("@Name", SqlDbType.NVarChar);
    p1.Value = txtName.Text;
    cmd.Parameters.Add(p1);
    SqlParameter p2 = new SqlParameter("@Surname", SqlDbType.NVarChar);
    p2.Value = txtSurname.Text;
    cmd.Parameters.Add(p2);
    SqlParameter p3 = new SqlParameter("@Tel", SqlDbType.Char);
    p3.Value = txtTel.Text;
    cmd.Parameters.Add(p3);
    cmd.ExecuteNonQuery();
    cnn.Close();

我认为这里的问题是,您已经用这行代码构建了一个没有参数的sql语句:

cmd.CommandText = "insert Personel (Name,Surname,Tel) values  ('"+txtName.Text+"','"+ txtSurname.Text+"','"+txtTel.Text+"')  ";
此结果是一条直接工作的sql语句(无参数):

您需要将sql语句替换为以下内容:

"insert Personel (Name,Surname,Tel) values ( @Name,@Surname,@Tel)"

然后添加符合Tejs建议的参数。

@gehgt:这实际上是服务器的有效连接字符串语法。这有点像说(localhost)或127.0.0.1或::1。基本上是指这台机器。“参数名称应该与存储过程定义匹配。”他没有存储过程。
"insert Personel (Name,Surname,Tel) values ('ValueOfTxtName','ValueOfTxtSurname','ValueOfTxtName' )"
"insert Personel (Name,Surname,Tel) values ( @Name,@Surname,@Tel)"