gpt4 book ai didi

c# - ExecuteNonQuery() 不保存任何记录

转载 作者:太空狗 更新时间:2023-10-30 01:59:24 25 4
gpt4 key购买 nike

我正在使用基于 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 文件,我将记录写入一个文件,但试图在另一个文件中找到它们:)

当您将 MDF 文件添加到您的 VS2010 项目中时,VS2010 默认情况下会与该 MDF 文件建立连接,您可以从那里浏览该 MDF 文件中的内容。用于此目的的 MDF 文件是放置在项目的文件夹,而不是 bin\Debug\文件夹中的文件夹。正如我之前所说,我的代码使用了 bin\Debug 文件夹中的代码:)

所以我现在所做的是从我的项目中删除了 Test.MDF 文件引用,这删除了项目文件夹中存在的副本。但是,我在 bin\Debug\文件夹中有一个 TestDB.MDF 文件的副本,我从我的应用程序中连接到该文件夹​​。如果我想在我的项目之外浏览 MDf 文件,我会使用 SQL Management Studio。这里唯一的问题是 MDF 文件在给定时间只能由一个程序使用。因此,如果我必须在我的应用程序中使用它,我必须将它从 SQL Management Studio 中脱机,反之亦然!

我希望这个解释可以帮助那里的人:)

关于c# - ExecuteNonQuery() 不保存任何记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12564761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com