C# SQL的相对路径不保存对数据库的更改

C# SQL的相对路径不保存对数据库的更改,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试将SQL数据库添加到我的项目中。当使用显式路径时,我已经成功了,但是如果我使用相对路径|DataDirectory |\Data\Database.mdf,控制台似乎正在向数据库写入数据,但在服务器资源管理器中查看数据库之后,不会显示数据。还有几个其他问题接近于回答,但我一直无法找到一个有效或接近解决的答案 编辑 然而,根据下面的建议,我尝试了修复,只是想澄清一下程序似乎按照预期连接并写入数据库,但当我查看数据库结构时,没有创建表,没有插入数据,即使程序运行时没有错误 如上所述,

我正在尝试将SQL数据库添加到我的项目中。当使用显式路径时,我已经成功了,但是如果我使用相对路径
|DataDirectory |\Data\Database.mdf
,控制台似乎正在向数据库写入数据,但在服务器资源管理器中查看数据库之后,不会显示数据。还有几个其他问题接近于回答,但我一直无法找到一个有效或接近解决的答案

编辑 然而,根据下面的建议,我尝试了修复,只是想澄清一下程序似乎按照预期连接并写入数据库,但当我查看数据库结构时,没有创建表,没有插入数据,即使程序运行时没有错误


如上所述,当为数据连接使用显式路径时,这完全有效
C:\User\User\Projects\CSharp\RecipeHandler\data\TestRecipeDatabase.mdf


但使用相对路径不起作用。理想情况下,我希望能够在任何明显没有数据库的计算机上运行此功能

您是否可以尝试构建指向服务器的
SqlConnection
?检查此处的答案:删除AttachDbFilename(mdf文件名)。这不是必需的,可能会导致问题。服务器通过数据库名称Catalog=TestRecipeDatabase知道mdf的位置。创建目录时,文件名存储在SQL Server中。我将尝试使用rigerta链接的答案,我以前看过,但它似乎仍然没有修改数据库,如前所述,看起来它正在工作,但没有对数据库进行任何更改。jdweng我也会尝试一下,但是由于
TestRecipeDatabase
不在项目的根目录下,我是否需要添加路径:
data\TestRecipeDatabase
?我会提供一些建议。首先,不要使用文本数据类型。十多年来,它一直被弃用,取而代之的是varchar(max)。其次,您需要阅读有关规范化的内容。一份食谱至少需要2张桌子。一个用于配方信息,另一个用于配料。将配料存储在逗号分隔的列表中会违反1NF,处理起来非常痛苦。
 public void connectToDB(string action)
        {
            var connectionString = ConfigurationManager.ConnectionStrings["rData"].ConnectionString;
            Console.WriteLine(connectionString);
            SqlConnection conn = new SqlConnection(connectionString);

            if (action == "firstRun")
            {
                conn.Open();
                // Creates the Database
                try
                {
                    using (SqlCommand createDBTable = new SqlCommand("" +
                        "CREATE TABLE RecipeStorage" +
                        "(" +
                        "rname char(50) NOT NULL, " +
                        "ringredients text, " +
                        "rdirections text" +
                        ");", conn))
                        createDBTable.ExecuteNonQuery();
                    Console.WriteLine("Created Database");
                }

                catch (SqlException e)
                {
                    Console.WriteLine(e.Message);
                    System.Diagnostics.Trace.WriteLine(logTime + " " + e.Message);
                }

                // Sets the primary key to rname
                try
                {
                    using (SqlCommand setPrimaryKey = new SqlCommand("ALTER TABLE RecipeStorage ADD PRIMARY KEY (rname);", conn))
                        setPrimaryKey.ExecuteNonQuery();
                    Console.WriteLine("Set Primary Key to Recipe Name");
                }

                catch (SqlException e)
                {
                    Console.WriteLine(e.Message);
                    System.Diagnostics.Trace.WriteLine(logTime + " " +e.Message);
                }

                // Adds an initial recipe
                try
                {
                    using (SqlCommand firstLine = new SqlCommand("INSERT INTO RecipeStorage (rname, ringredients, rdirections) VALUES ('espresso', 'Hot water, coffee'," +
                        "'put coffee through espresso machine with hot water into cup, enjoy');", conn))
                        firstLine.ExecuteNonQuery();
                }

                catch (SqlException e)
                {
                    Console.WriteLine(e.Message);
                    System.Diagnostics.Trace.WriteLine(logTime + " " + e.Message);
                }
                conn.Close();
            }
        }