繁体   English   中英

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

[英]Incorrect syntax near '.'. - C#

当我尝试运行以下代码时,我收到了一个错误。可能是什么问题?

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;

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

您应该使用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();

cmd.CommandText =“插入Personel(姓名,姓氏,电话)值(@ Name,@姓,@ Tel)”;

看起来更合乎逻辑,您还必须确保您的sommand参数与变量名称匹配。

Tejs是正确的,从你的paramnames中删除DOTS。

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

cmd.CommandText = "insert Personel (Name,Surname,Tel) 
values(@txtNameText,@txtSurnameText,@txtTelText)  ";

请重命名这些参数,它们的名字很糟糕!

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

cmd.CommandText = "insert Personel (Name,Surname,Tel) values  ('"+txtName.Text+"','"+ txtSurname.Text+"','"+txtTel.Text+"')  ";

这个结果是一个直接工作的sql语句(没有参数):

"insert Personel (Name,Surname,Tel) values ('ValueOfTxtName','ValueOfTxtSurname','ValueOfTxtName' )"

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM