我正在尝试更新项目表:
public void updateDatabase(Item item)
{
string sqlString = "UPDATE Items Set Quantity = '" + item.Quantity.ToString().Trim() + "' " + "WHERE ItemID = '" + item.ItemID.Trim() + "'";
//string sqlStringParam = "UPDATE Items Set Quantity = @quant WHERE ItemID = @id";
//Create & execute the update command
using (SqlCommand sc = new SqlCommand(sqlString, mainConn))
{
//sc.Parameters.AddWithValue("@quant", item.Quantity);
//sc.Parameters.AddWithValue("@id", item.ItemID);
Console.WriteLine(sc.CommandText.ToString());
UpdateDataSource(sc, table);
}
Console.WriteLine("done");
}
这会将命令发送到数据库类以执行查询:
protected bool UpdateDataSource(SqlCommand command, string table)
{
bool success;
try
{
if (mainConn.State != ConnectionState.Open)
{
mainConn.Open();
}
Console.WriteLine(command.CommandText);
command.CommandType = CommandType.Text;
Console.WriteLine(command.ExecuteNonQuery());
mainConn.Close();
success = true;
}
catch (Exception e)
{
MessageBox.Show(e.Message + " " + e.StackTrace, "Error Updating Database");
mainConn.Close();
success = false;
}
finally
{
mainConn.Close();
}
return success;
}
如您所见,我已经尝试使用concat方法和参数化方法,但它们都不会更新表。这是尝试更新2个项目时的输出:
UPDATE Items Set Quantity = '4' WHERE ItemID = '1122'
UPDATE Items Set Quantity = '4' WHERE ItemID = '1122'
1
done
UPDATE Items Set Quantity = '9' WHERE ItemID = '1155'
UPDATE Items Set Quantity = '9' WHERE ItemID = '1155'
1
done
在我看来,似乎应该在更新表格。我什至从上面运行了一个完全复制的语句作为单个查询,它会更新表。
ExecuteNonQuery
甚至返回1。
答案 0 :(得分:1)
您可以使用跟踪,只需确保系统中已经安装了SQL Server Profiler。
SQL跟踪将告诉您在SQL Server中实时执行哪些命令。
SQL Server Profiler
启用跟踪,然后执行您的应用程序,瞧!
这将在以后使用SQL Server时为您提供帮助;)
答案 1 :(得分:0)
看来问题出在我所使用的.mdf数据库文件的属性上。它设置为“始终复制”,而不是正确的“如果有新副本”设置。有趣的是,有人告诉我我不得不使用“始终复制”,但这似乎是不正确的。
感谢大家的帮助