SqlCommand返回1,但数据库没有得到更新..我做错了什么?

问题描述:

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand cmd = new SqlCommand("INSERT INTO Alarm (artistname, tijd) VALUES (@artistname, @tijd)", connection); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = connection; 
    cmd.Parameters.AddWithValue("@artistname", alarm.ArtistName); 
    cmd.Parameters.AddWithValue("@tijd", alarm.Time); 
    connection.Open(); 
    int a = cmd.ExecuteNonQuery(); 
    System.Windows.Forms.MessageBox.Show(a.ToString()); 
    // returns 1 but database doesn't actually update.. 
} 

上面的代码是我用来更新我的数据库的报警表。 int a返回1,但数据库实际上没有更新。我究竟做错了什么? visual studio也不会给我任何错误信息。SqlCommand返回1,但数据库没有得到更新..我做错了什么?

+3

您可能需要提交您的事务。 –

+0

像sqllite这样的一些数据库总是使用事务,您需要提交事务以'保存'对数据库的更改(或者可能关闭连接) –

+1

您怎么知道数据库未更新?你正在查询并没有插入任何内容? – NicoRiff

ExecuteNonQuery将返回成功的1。您正在执行INSERT声明而不是UPDATE声明。如果你想添加的新记录的ID使用

INSERT INTO Alarm (artistname, tijd) VALUES (@artistname, @tijd); 
Select Scope_Idenitity();

然后用

int a = (int)cmd.ExecuteScalar();
+2

如果ExecuteNonQuery成功,则返回受影响的行数不为1。我认为OP只是在“东西进入我的数据库”的意义上使用了术语_updated_ –

+0

是的,我使用术语''updated''作为Tim的意思''东西进入我的数据库''' 给我有2个列表视图> (1充满了他们玩的艺术家的名字和时间) (1为空) 如果我从listview1中选择一位艺术家并按下''添加闹钟' '我想写这个艺术家的时间到我的table.alarms并在listview2中查看它(显示我为不同艺术家设置的所有警报)。 问题: Listview1正常工作 Listview2可以查看alarms.table我的数据库(测试) 但我不能从窗体插入项目。 –