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