【发布时间】: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