我正在使用基于WinForms的C#工具,该工具具有附加的基于MDF文件的数据库。我正在尝试使用SqlCommand.ExecuteNonQuery()
方法将记录保存到此附加的MDF数据库中,但是未保存该记录。没有错误或异常发生;唯一的问题是记录实际上并未保存。
我在顶部有一个Console.WriteLine
,它显示了我要运行的查询。它是正确的语法,如果我从输出窗口中将其复制粘贴并单独运行,它将可以正常工作。
我已经正确定义了以下连接字符串,并且可以很好地用于获取记录:public static String connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestBuildDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
这是我用来保存记录的函数:
public static void PerformDBWriteTransaction(string inputSQLStatement)
{
Console.WriteLine(inputSQLStatement);
DataTable returnDataTable = new DataTable();
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = connectionString;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = inputSQLStatement;
cmd.Connection.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
errorMessages.Clear();
errorMessages.Append("The following errors were found in the SQL statement:\n\n");
for (int i = 0; i < ex.Errors.Count; i++)
{
errorMessages.Append("Index #" + i + "\n" +
"Message: " + ex.Errors[i].Message + "\n" +
"LineNumber: " + ex.Errors[i].LineNumber + "\n" +
"Source: " + ex.Errors[i].Source + "\n" +
"Procedure: " + ex.Errors[i].Procedure + "\n");
}
MessageBox.Show(errorMessages.ToString());
}
finally
{
cmd.Connection.Close();
}
}
有人可以告诉我可能是什么问题吗?我需要以某种方式执行“提交”吗?
编辑:
我发现了问题,并在下面写下了解决方案..谢谢所有帮助我的人:)
最佳答案
我发现了问题!这很简单,真的很愚蠢:) ..上面的代码都是正确的..是的,人们指出了优化等,但是上面的代码仍然是正确的。
问题是,当我将TestDB.MDF文件导入到我的Visual 2010项目中时,该文件的副本是在项目文件夹中创建的。当您运行/调试程序时,将创建此文件的另一个副本并将其放在\ bin \ Debug \文件夹中。在我使用的连接字符串中,我提到了:AttachDbFilename=|DataDirectory|\TestBuildDB.mdf
..这意味着对bin \ Debug文件夹中的副本进行的所有读/写操作均已完成。但是,我正在检查的TestDB.MDF文件位于项目的文件夹中!因此,基本上有两个MDF文件,我正在将记录写到一个文件中,但试图在另一个文件中找到它们:)
当您向VS2010项目中添加MDF文件时,默认情况下,VS2010会与该MDF文件建立连接,从中可以浏览该MDF文件中的内容。用于此目的的MDF文件是放置在项目文件夹中的MDF文件。 ,而不是bin \ Debug \文件夹中的那个。就像我之前说的,我的代码使用了bin \ Debug文件夹中的代码:)
因此,我现在要做的是从项目中删除了Test.MDF文件引用,这删除了项目文件夹中存在的副本。但是,我确实在bin \ Debug \文件夹中有TestDB.MDF文件的副本,该副本是从应用程序内部连接到的。如果要在项目外浏览MDf文件,请使用SQL Management Studio。唯一的问题是MDF文件在给定时间只能由一个程序使用。因此,如果必须在应用程序中使用它,则必须使它从SQL Management Studio脱机,反之亦然!
我希望这种解释可以帮助某人:)