我正在尝试使用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中的名称为VARCHAR类型。
编辑: 我已经使用参数并将字符串转换为varchar,现在出现了不同的错误:
字符串或二进制数据将被截断。 该声明已终止
好。排序。
最后一个错误告诉我,该列仅接受1个字符,因为VARCHAR默认为1。
我用新的记录最大输入重新创建了表。
使用参数解决了我原来的问题。
谢谢你们。
答案 0 :(得分:6)
"INSERT INTO Product (UserId, Name) '" +
"'VALUES (null, '" + objProduct.Name + "');",
还有多余的撇号:第一行的末尾是一个撇号,第二行的末尾是一个撇号。
此外,请使用参数避免有意或无意的SQL注入攻击。可能会引起您的错误,具体取决于objProduct.Name
中的值。
答案 1 :(得分:1)
您还有多余的单引号。您的SQL查询适用于INSERT INTO Product (UserId, Name) ''VALUES (null, 'name')