更新了问题:
出于某种原因,我让我的代码工作(必定是一个错字或其他东西,仍然不确定)。然而,这是困扰我的最后一件事。我有这段代码:
string strConn = @"Data Source = |DataDirectory|\Database\DbFilm.sdf;Persist Security Info=False";
string insQuery = "INSERT INTO film (naam, medium_id, genre_id, land_id, jaar, lengte, videoformaat_id) VALUES (@naam, @medium_id, @genre_id, @land_id, @jaar, @lengte, @videoformaat_id)";
using (SqlCeConnection con = new SqlCeConnection(strConn))
{
con.Open();
using (SqlCeCommand Query = new SqlCeCommand(insQuery, con))
{
Query.Parameters.AddWithValue("@naam", dbNaam);
Query.Parameters.AddWithValue("@medium_id", dbMedium_id);
Query.Parameters.AddWithValue("@genre_id", dbGenre_id);
Query.Parameters.AddWithValue("@land_id", dbLand_id);
Query.Parameters.AddWithValue("@jaar", dbJaar);
Query.Parameters.AddWithValue("@lengte", dbLengte);
Query.Parameters.AddWithValue("@videoformaat_id", dbVideoformaat_id);
Query.CommandType = System.Data.CommandType.Text;
Query.ExecuteNonQuery();
{
con.Close();
}
}
这不起作用。我没有收到错误,但我的数据库没有收到插入内容。当我在ExecuteNonQuery
处中断时,我注意到生成的查询没有为@parameters
获取正确的值。所以实际的查询看起来像这样:
INSERT INTO film (naam, medium_id) VALUES (@naam, @medium_id)
但它应该是这样的:
INSERT INTO film (naam, medium_id) VALUES ('title1', 'disc1')
我应该怎么做才能从字符串(dbNaam
,dbMedium_id
等)中取代@naam
,@medium_id
中的值?
P.S。当我将此代码与不使用AddWithValue的查询一起使用时,它可以正常工作。
答案 0 :(得分:0)
试试这个
INSERT INTO Table_Name(column1,column2) VALUES (@Val1,@Val2)", con);
答案 1 :(得分:0)
我没有对此进行测试,但根据您的查询,我感觉发生了错误,因为列名中使用了keyword
。
name
,column
,number
都是SQL关键字。避免它的一种方法是在列名称周围添加[]
,例如INSERT INTO [column] ([name], [number])
,这将告诉SQL这些是列名而不是尝试调用函数或其他东西。但是,我的建议始终是避免使用关键字。
如果它修复了您的错误,请尝试告诉我。
其他提示:由于您可以直到ExecuteNonQuery
,在那里设置一个断点,然后右键单击并查看发送到数据库的实际查询。复制查询并将其直接粘贴到数据库中,看看它是否运行。