- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用基于 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/
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我在 asp.net mvc 中有一个 webapp,带有一个通过 ODBC 驱动程序链接的 mysql 数据库。 在旧环境中一切都运行良好,但现在我必须转移到新服务器(新操作系统、新 IIS、新 m
我不是一个很好的程序员,但我认为代码是正确的。任何人都可以检查它是否有错误,因为我总是在 executenonquery 行出错。 错误是: {"Incorrect syntax near '9'."
我正在尝试编写一个通用的保存函数,并且我正在使用 Dbcommand。我的代码是: private static int Save(CommandType commandtype, string co
您好,我正在尝试使用 ADO.NET 将数据插入数据库。这是我的代码。这是我的 C# 代码: public void CreateBook(FormCollection collection)
我有以下代码,它没有更新数据库。该代码正在执行它应该执行的操作,但是当我执行 ExecuteNonQuery() 时,它不会将任何内容保存回数据库。连接字符串没有问题,因为它与正在运行的选择查询相同。
我正在使用 ExecuteNonQuery 在数据库中插入一条记录并返回新记录的 ID。它插入正常,但输出参数未更新。 尝试在 SSMS 中执行存储过程并且运行良好。只有在使用 ExecuteNonQ
我认为连接没有问题,因为当我打开它时,它不会抛出任何错误。所以我猜错误是在我执行命令时出现的。这是我的代码: OleDbCommand cmd = new OleDbCommand("SELECT *
我正在使用 OracleCommand.ExecuteNonQuery() 插入到表中。一切正常,但偶尔没有插入记录。那么 ExecuteNonQuery() 是否有可能不插入记录也不抛出异常? 我没
我有最简单的代码... // Connect to database etc string sqlStr = "INSERT INTO .... ... "; MySqlCom.CommandText
我想检查数据库中的所有表并删除具有特定 id 的所有行。当行数较小时,效果很好。 在特定表中,行数为 900000,这不再起作用。 这是我当前的代码: Using connection = New M
这是我的代码: Document doc = new Document(); SqlConnection cnn = Ketnoi.GetSqlConnection(); cnn.Open(); Sq
我有这段代码,运行时给出此错误ExecuteNonQuery:Connection属性尚未初始化。 而且我有sql数据库。 它的名字叫Cost。 我有这段代码,运行时给出此错误ExecuteNonQu
我的sql server 2008数据库中有一个表 COMMENT(idcom,content,username); 该表有2条记录,其中username = lecturer 现在,我要删除所有具有
这是我的代码: private void loadlist() { comboBox1.Items.Clear(); cn.Open(); cmd.Co
我的代码在下面的 ExecuteNonQuery 行超时。我不知道为什么。我已将超时时间增加到 900,但它仍然超时。 using (var conn = new SqlConnection(loca
我正在使用 Microsoft Data-Tier Application framework基于 DacPackage 创建部署脚本目的。我正在尝试使用 Microsoft.SqlServer.Ma
我正在使用基于 WinForms 的 C# 工具,它有一个附加的基于 MDF 文件的数据库。我正在尝试使用 SqlCommand.ExecuteNonQuery() 方法将记录保存到这个附加的 MDF
我存储的过程如下: ALTER PROC pr_Update_Users_Nomination ( @UserID AS VARCHAR(100), @Nominated A
我正在尝试在 C# 中的循环内插入一条数据库记录。 当我像这样对值进行硬编码时它会起作用: string query3 = "INSERT INTO furniture (room_id,me
我是一名优秀的程序员,十分优秀!