【问题标题】:Incorrect syntax near '.' SQL INSERT c#'.' 附近的语法不正确SQL 插入 c#
【发布时间】:2025-12-02 02:50:01
【问题描述】:

我正在尝试使用类 Object 将新记录添加到 SQL 数据库表。我创建了一个产品列表,然后使用 sql 语句遍历所有产品。

我的代码是这样的:

    private void backupButton_Click(object sender, RoutedEventArgs e)
    {
        ReadAllProductsList dbproducts = new ReadAllProductsList();
        DB_Product = dbproducts.GetAllProducts();
        List<Product> SQLProductList = new List<Product>();
        SQLProductList = DB_Product.Where(Product => Product.UserId == currentUser).ToList();
        for(int i = 0; i < SQLProductList.Count; i++)
        {
            InsertSQLProduct(new Product(SQLProductList[i].UserId,
                                                        SQLProductList[i].Name));

        }
    }

    public void InsertSQLProduct(Product objProduct)
    {
        using (var connection = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated Security=SSPI;database=MyLocalDB"))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("INSERT INTO Product (UserId, Name) '" +
                                                        "'VALUES (null, '" + objProduct.Name + "');", connection))
            {
                command.ExecuteNonQuery();
            }

        }
    }

Product 类看起来像这样:

public class Product
{

    // List<DietId> Lst = new List<DietId>();
    //The Id property is marked as the Primary Key  
    [SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
    public int Id { get; set; }
    public string UserId { get; set; }
    public string CreationDate { get; set; }
    public string Name { get; set; }




    public override string ToString()
    {
        return Name;
    }

    public Product()
    {
        //empty constructor  
    }

    public Product(string userId, string name)
    {
        UserId = userId;

        CreationDate = DateTime.Now.ToString();

        Name = name;

    }
}

但是,我收到以下命令的错误:

'.' 附近的语法错误

我在这里做错了什么?

PS。 SQL 中的 Name 是 VARCHAR 类型。

编辑: 我已经使用了参数并将字符串转换为 varchar,现在我得到了不同的错误:

字符串或二进制数据将被截断。 声明已终止

好的。排序。

最后一个错误告诉我该列只接受 1 个字符,因为 1 是 VARCHAR 的默认值。

我用新的最大记录输入重新创建了表。

使用参数解决了我原来的问题。

谢谢你们。

【问题讨论】:

  • 参数化你的 sql。不要将它连接在一起。你还有一些奇怪的单引号
  • 我会的,我写的是没有参数的测试。
  • 也看看这个little bobby tables
  • 使用参数化查询进行测试。它们解决了串联导致的许多问题。它们也很容易编写。您可以修复撇号/单引号问题,并发现您连接的值带来了导致 SQL 失败的意外垃圾。
  • 是的,我会的。我使用参数,这里我在测试代码时还没有使用它们。

标签: c# mysql sql sql-insert


【解决方案1】:
"INSERT INTO Product (UserId, Name) '" +
"'VALUES (null, '" + objProduct.Name + "');",

还有额外的撇号:一个在第一行的末尾,一个在第二行的开头。

此外,使用参数来避免有意或无意的 SQL 注入攻击。这可能会导致您的错误,具体取决于 objProduct.Name 中的值。

【讨论】:

    【解决方案2】:

    你有额外的单引号。您的 SQL 查询结果为 INSERT INTO Product (UserId, Name) ''VALUES (null, 'name')

    【讨论】: