靠近“.”的语法不正确sql insert c#

tjvv9vkg  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(347)

我正在尝试使用class对象向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();
            }

        }
    }

产品类别如下所示:

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;

    }
}

但是,我得到一个错误的命令说:
“.”附近的语法错误
我做错什么了?
另外,sql中的名称是varchar类型。
编辑:我使用了参数并将字符串转换为varchar,现在得到了不同的错误:
字符串或二进制数据将被截断。语句已终止
好 啊。已排序。
最后一个错误告诉我该列只接受1个字符,因为1是varchar的默认值。
我用新的max input for records重新创建了表。
使用参数解决了我原来的问题。
谢谢你们。

lmyy7pcs

lmyy7pcs1#

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

kzmpq1sx

kzmpq1sx2#

"INSERT INTO Product (UserId, Name) '" +
"'VALUES (null, '" + objProduct.Name + "');",

还有额外的撇号:一个在第一行的末尾,一个在第二行的开头。
另外,使用参数可以有意或无意地避免sql注入攻击。它可能会导致错误,具体取决于 objProduct.Name .

相关问题