为什么行没有插入数据库? C#

时间:2015-06-30 08:15:10

标签: c# sql-server

上次更新

我想我发现了为什么会这样。每次我尝试调试我的应用程序时,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;

我的数据库中没有任何触发器,或者插入后没有任何可能删除行的触发器。目前,它只有一个表,城市,看起来像这样:

DB screen capture

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连接,所以可能有一些非常明显和愚蠢的东西,但是它让我发疯了。

3 个答案:

答案 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,...。也许其中一个是问题,但改变所有问题更好。

相关问题