【问题标题】:ADO.Net - Why isn't the insert happening?ADO.Net - 为什么插入没有发生?
【发布时间】:2010-09-11 10:45:36
【问题描述】:

我浏览了 MSDN 页面来学习使用命令的 ADO.Net。我可以使用那里发布的示例代码进行阅读。

但是当我尝试使用下面的修改代码时,插入没有发生。我不知道为什么。谁能告诉我这段代码有什么问题?

string connectionString = "A_VALID_CONNECTION_STRING";
string commandText = 
"INSERT INTO Contacts (FullName, Mobile) VALUES ('Pierce Brosnan', '1800-007')";

SqlConnection connection = new SqlConnection(connectionString);          

try
{
  connection.Open();
  SqlCommand command = new SqlCommand(commandText, connection);
  Console.WriteLine(command.ExecuteNonQuery());
  connection.Close();
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
}

编辑

  • 不抛出异常。

  • 应该返回编号的 ExecuteNonQuery()。受影响的行数正在返回 1

  • 环境:Visual C# 2010 Express | SQL Server 2008 速成版 | Windows 7 Ultimate 32 位。

更新

  1. 以前我使用的是项目中存在的 MDF 文件。我猜,每次项目运行时,它都会自动附加到 SQL 服务器实例。这是我遇到问题的时候。连接字符串有一些关于附加数据库文件的信息。

  2. 我删除了随 Visual C# 2010 Express 一起安装的 SQL Server 2008 Express。还从项目中删除了 MDF 文件。

  3. 我单独下载并安装了 SQL Server 2008 Express 和 Management Studio Express。

  4. 在 Management Studio 中创建了一个新数据库。

  5. 使用不同类型的连接字符串来使用服务器中的数据库。

现在 INSERT 正在工作!

附注我想我应该提到我有一个附加数据库文件方案。真的很抱歉。

【问题讨论】:

  • 没有。不会抛出(或打印)异常。 Console.WriteLine 打印1。但是当我看到数据库表时,什么都没有插入。我正在使用 C# 2010 Express IDE 中的数据库资源管理器查看数据。
  • 这真的很奇怪。您的代码看起来不错,如果打印了1,则表示插入了一行。
  • 会不会是数据库浏览器没有显示更新的数据?是否因为它是 Express 版而在某些方面受到限制?
  • 尝试发送另一个查询,例如select count(*) from contacts
  • 查询是否在您未完成的事务中运行?

标签: c# ado.net .net-4.0 sql-server-express


【解决方案1】:

我怀疑你有以下情况:

  • Database.mdf 文件存在于项目中,并在其中创建了表结构
  • 您的连接字符串类似于Server=.\SQLExpress;AttachDbFilename=database.mdf;Database=dbname; Trusted_Connection=Yes;,即在连接字符串中加载数据库。

发生的情况是,当您构建/运行您的项目时,您的应用程序已编译,database.mdf 文件与它一起被复制到 ApplicationProjectFolder\bin\Debug,因此当应用程序运行时,文件 database.mdf 是展示。这意味着每次运行项目时,“空”database.mdf 文件都会从ApplicationProjectFolder\database.mdf 复制到ApplicationProjectFolder\bin\Debug\database.mdf,因此数据“消失”。此外,文件database.mdf 可能在项目的属性中设置了“始终复制”。

因此,“INSERT”正在工作,只是在您每次运行应用程序时都被“重置”。

【讨论】:

  • 前半天你在哪里? :P 非常感谢您解释为什么现在开始工作! :) 正如我所说,如果我完全提到了这个场景,我本可以更早得到答案:|.. 和 +1
  • @Senthil,没问题。我以前也遇到过同样的情况,诚然使用 Sql Server Ce 数据库,但主体仍然存在。我一看到你的问题,我就知道发生了什么=) PS - 有没有机会对答案进行投票并被接受? ;-)
  • 哈,礼仪章程中不是写着你不应该要求投票吗?再说了,那你指望如何获得坚韧徽章呢? (+1)
  • @JohnB,可能是这样,但打破章程是最有趣的 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多