我想我发现了为什么会这样。每次我尝试调试我的应用程序时,Visual Studio都会在调试文件夹上创建一个新的数据库文件。当我的应用关闭时,此文件将被删除,因此我在运行时所做的每项更改都将被删除。我不知道如何改变它,但是当我想出来时我会发布它。
**
**
我在C#中创建了一个类来处理数据库操作。我有一个方法从数据库读取工作正常。但是当我尝试插入行时,没有任何反应。没有错误或异常,代码运行正常,达到“返回true”语句,但是当我检查数据库之后,我没有任何新数据。 DB现在是空的,因此它与任何唯一字段都没有任何冲突。 id字段不是自动生成的,所以这也不是问题。
以下是代码:
public bool saveCity(City c)
{
string query = "INSERT INTO [dbo].[cities] ([Id], [Name], [Latitude], [Longitude], [Radius], [LastUpdate])" +
" VALUES (@Id, @Name, @Latitude, @Longitude, @Radius, @LastUpdate);";
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand(query, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@Id", c.Id);
cmd.Parameters.AddWithValue("@Name", c.Name);
cmd.Parameters.AddWithValue("@Latitude", c.Latitude);
cmd.Parameters.AddWithValue("@Longitude", c.Longitude);
cmd.Parameters.AddWithValue("@Radius", c.Radius);
cmd.Parameters.AddWithValue("@LastUpdate", c.Update);
if (cmd.ExecuteNonQuery() > 0)
{
return true;
}
else
{
return false;
}
}
}
}
catch (Exception)
{
return false;
}
}
connString被定义为类字段:
connString = Properties.Settings.Default.DBConnectionString;
我的数据库中没有任何触发器,或者插入后没有任何可能删除行的触发器。目前,它只有一个表,城市,看起来像这样:
City类的代码:
class City
{
public int Id;
public string Name;
public int Radius;
public double Latitude;
public double Longitude;
public DateTime Update;
public City()
{
Id = -1;
Name = "";
Radius = 0;
Latitude = 0;
Longitude = 0;
Update = DateTime.Now;
}
}
这是我第一次使用C#DB连接,所以可能有一些非常明显和愚蠢的东西,但是它让我发疯了。
答案 0 :(得分:1)
最后,我找到了解决方案。每次尝试调试时,Visual Studio都会创建一个新的DB实例。有人发布了此问题的解决方法,所以这里是链接:
Can I commit changes to actual database while debugging C# in Visual Studio?
答案 1 :(得分:0)
在参数名称前面也包括数据类型和问号,而不是@。例如:
string query = @"INSERT INTO cities (Id, name, coord_x, coord_y, radius, updated_at)"
+ " VALUES (?id, ?name, ?lat, ?lng, ?rad, ?update)";
cmd.Parameters.Add("?id", MySqlDbType.Int32).Value = c.Id
等。
希望这有帮助
答案 2 :(得分:0)
将double
更改为decimal
,在Parameters.Add
中指定数据库类型,并将INSERT INTO ... VALUES (@id,...)
语法更改为INSERT INTO ... SELECT @id,...
。也许其中一个是问题,但改变所有问题更好。