pos*_*ive 0 c# mysql sql sql-insert
我正在尝试使用类Object将新记录添加到SQL数据库表.我创建了一个Products列表,然后用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到的命令错误说:
'.'附近的语法错误
我在这做错了什么?
PS.SQL中的Name是VARCHAR类型.
编辑:我已经使用参数并将字符串转换为varchar现在我得到不同的错误:
字符串或二进制数据将被截断.该语句已终止
好.排序.
最后一个错误告诉我该列只接受1个字符,因为1是VARCHAR的默认值.
我为记录重新创建了新的最大输入表.
使用参数解决了我原来的问题.
感谢你们.
"INSERT INTO Product (UserId, Name) '" +
"'VALUES (null, '" + objProduct.Name + "');",
Run Code Online (Sandbox Code Playgroud)
有一些额外的撇号:一个在第一行的末尾,一个在第二行的开头.
此外,使用参数可以有意或无意地避免SQL注入攻击.它可能会导致您的错误,具体取决于值的大小objProduct.Name.
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |