附加信息:'s'附近的语法不正确

时间:2016-12-10 22:14:26

标签: c# sql-server visual-studio windows-forms-designer

请你告诉我我的错误在哪里?!? 我在任何's'附近找不到任何不正确的语法! 这是我的代码:

public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price)
{
    SqlConnection cn = new SqlConnection();
    cn.ConnectionString = Server.Connection;
    cn.Open();

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = cn;
    cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price) 
      values('" + Site.Text + "','" + server.Text + "','" + Host.Text + "','" + Domain.Text + "','" + Price.Text + "')'"; 


    SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, cn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

2 个答案:

答案 0 :(得分:4)

原因是您没有使用SqlParameter将值传递给查询 如果您使用了参数,那么您的查询中不会出现额外的'字符这样的问题。

始终使用SqlParameters。

public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price)
{
    using (var cn = new SqlConnection(Server.Connection))
    {
        cn.Open();

        using (var cmd = new SqlCommand())
        {
            cmd.Connection = cn;
            cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price) values (@Site, @Server, @Host, @Domain, @Price)"; 
            var parameters = new[]
            {
                new SqlParameter { ParameterName = "@Site", .SqlDbType = SqlDbType.VarChar, .Value = Site.text },
                new SqlParameter { ParameterName = "@Server", .SqlDbType = SqlDbType.VarChar, .Value = server.text },
                new SqlParameter { ParameterName = "@Host", .SqlDbType = SqlDbType.VarChar, .Value = Host.Text },
                new SqlParameter { ParameterName = "@Domain", .SqlDbType = SqlDbType.VarChar, .Value = Domain.Text },
                new SqlParameter { ParameterName = "@Price", .SqlDbType = SqlDbType.VarChar, .Value = Price.Text }
            }
            cmd.Parameters.AddRange(parameters);

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();

            da.Fill(dt);
            return dt;
        }
    }
}

然后您可以使用以SqlDataAdapter作为参数的SqlCommand构造函数,因为您的cmd包含运行查询所需的所有信息。

答案 1 :(得分:2)

问题可能在于其中一个包含撇号(')的参数。尝试打印cmd.CommandText,您将看到它不是有效的SQL命令。

在相关的说明中,这是SQL注入的基础。解决方案不是通过连接值来构造SQL命令,尤其是字符串。而是使用命令参数并构造参数化命令。

您可以在MSDN上了解详情:How to: Execute a Parameterized Query