数据没有插入表格?

时间:2012-02-21 18:07:42

标签: c# sql-server sql-server-2005

我的表名是Customer。它有四列

CustomerId
CustomerName
CustomerAddress
PhoneNo

这是我的c#代码。我没有得到任何例外,数据没有插入数据库。

string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VictoryDatabase.mdf;Integrated Security=True;User Instance=True";
SqlConnection myConnection = new SqlConnection(connString);

try
{
   myConnection.Open();
   string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)";
   SqlCommand myCommand = new SqlCommand(query,myConnection);
   myCommand.Parameters.AddWithValue("CustNm",Print[0].CustomerName);
   myCommand.Parameters.AddWithValue("CustAdd",Print[0].Address);
   myCommand.Parameters.AddWithValue("Ph",Print[0].Telephone);

   Console.WriteLine(Print[0].Telephone);

   myCommand.ExecuteNonQuery();
   myConnection.Close();
}
catch (Exception e)
{
   Console.WriteLine(e.ToString());
}

5 个答案:

答案 0 :(得分:6)

正如我之前在此网站上所说的那样 - 整个用户实例和AttachDbFileName = 方法存在缺陷 - 充其量! Visual Studio将围绕.mdf文件和最有可能进行复制,您的INSERT工作正常 - 但您只是查看错误的.mdf文件< / strong>到底!

如果你想坚持这种方法,那么尝试在myConnection.Close()调用上设置一个断点 - 然后用SQL Server Mgmt Studio Express检查.mdf文件 - 我几乎可以肯定你的数据在那里。

我认为真正的解决方案将是

  1. 安装SQL Server Express(你已经完成了)

  2. 安装SQL Server Management Studio Express

  3. SSMS Express 中创建数据库,为其指定一个逻辑名称(例如VictoryDatabase

  4. 使用其逻辑数据库名称(在服务器上创建时给定)连接到它 - 并且不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=VictoryDatabase;Integrated Security=True
    

    其他所有内容都完全与以前相同......

答案 1 :(得分:1)

你所说的根本不会发生。查询将插入记录,否则您将获得异常。

但是您的查询中存在错误。 @CustAdd参数周围不应该有撇号,这会使数据库将其解释为文字字符串,而不是参数:

string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,@CustAdd,@Ph)";

我不确定数据库会如何反应,但是你会得到一个异常,告诉你你有一个从未在查询中使用的参数,或者它会插入一个值为@CustAdd的记录作为地址。

答案 2 :(得分:0)

  1. 您确定要查看正确的数据库以验证否 正在插入数据?
  2. 您是否正在执行此插入内容 未提交的交易的上下文?

答案 3 :(得分:0)

你没有指定相同的参数,(忘了添加“@”就像这样:

string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)";
        SqlCommand myCommand = new SqlCommand(query,myConnection);
        myCommand.Parameters.AddWithValue("@CustNm",Print[0].CustomerName);
        myCommand.Parameters.AddWithValue("@CustAdd",Print[0].Address);
        myCommand.Parameters.AddWithValue("@Ph",Print[0].Telephone);

答案 4 :(得分:0)

CustomerId是否设置为Customer表上的AutoIncrementing PK?此外,您不需要'@CustAdd'参数上的单引号(');