【问题标题】:cannot insert data into database无法将数据插入数据库
【发布时间】:2012-04-13 12:08:23
【问题描述】:

我只想要我的标题所说的内容。我已经阅读了所有以前的类似帖子,但我找不到解决方案。你能看一下我的代码吗? 编辑:我没有得到任何异常。我只是没有在数据库中看到新数据 EDIT2:前 4 个答案没有解决我的问题,因为我编辑了代码并添加了 executenonquery 命令。

int admin = 23;
SqlConnection thisConnection = new SqlConnection(
    ConfigurationManager.ConnectionStrings[
    "Data Source=...;Persist Security Info=True;User ID=myusername;Password=mypassword"]
    .ConnectionString);
SqlCommand nonqueryCommand = thisConnection.CreateCommand();
thisConnection.Open();
nonqueryCommand.CommandText = "INSERT INTO Account (Username,Password,AdministratorId) VALUES (@username,@password,@admin)";

nonqueryCommand.Parameters.Add("@username", SqlDbType.VarChar, 20);
nonqueryCommand.Parameters["@username"].Value = UsernameTextbox.Text.ToString();
nonqueryCommand.Parameters.Add("@password", SqlDbType.VarChar, 15);
nonqueryCommand.Parameters["@password"].Value = PasswordTextbox.Text.ToString();
nonqueryCommand.Parameters.Add("@admin", SqlDbType.Int);
nonqueryCommand.Parameters["@admin"].Value = admin;

EDIT:nonquerycommand.ExecuteNonQuery();


thisConnection.Close();

【问题讨论】:

  • 请不要在标题前加上“c#”之类的前缀。这就是标签的用途。
  • 另外,您收到的确切异常是什么?
  • 旁注,不要直接存储您的密码。首先应用一个强散列函数并存储 just 散列。当你的数据库被盗时,这会让你不那么头疼。
  • 我没有得到任何异常。我只是没有看到数据库中的新数据

标签: c# asp.net sql-server database insert


【解决方案1】:

您似乎并没有真正执行您的查询。在关闭连接之前执行它。

nonquerycommand.ExecuteNonQuery();

【讨论】:

    【解决方案2】:

    代替

    nonqueryCommand.Parameters.Add("@username", SqlDbType.VarChar,20);
    nonqueryCommand.Parameters["@username"].Value = UsernameTextbox.Text.ToString();
    

    使用

    nonqueryCommand.Parameters.AddWithValue("@username", UsernameTextbox.Text.ToString());
    

    并执行您的查询:

    nonquerycommand.ExecuteNonQuery();
    

    【讨论】:

      【解决方案3】:

      克里斯·法默有钱。

      添加...

      nonqueryCommand.ExecuteNonQuery();
      

      【讨论】:

      • 这篇文章并没有说它已经过编辑,所以您似乎看到了 Chris 的答案,然后将其复制并粘贴到另一个答案中。我有点困惑你为什么要这样做或者增加了什么价值?
      • 我一定已经简要地阅读了他的回答。当我发布这个时,我在他的帖子上看到的只是“你似乎并没有真正执行你的查询。在关闭连接之前执行它。”。我试图通过向您展示如何执行您的查询来提供帮助。
      • 那更有意义。值得称赞的是,您的案子是正确的。 :)
      【解决方案4】:

      这里有两件事立即跳出来。

      1. 当您从ConfigurationManager.ConnectionStrings 检索连接字符串时,您应该在配置文件中传递连接字符串的名称,而不是它本身的连接字符串。我怀疑你甚至可能没有得到一个有效的连接字符串。

      2. 您需要在nonqueryCommand 实例上调用ExecuteNonQuery()

      【讨论】:

        【解决方案5】:

        您必须在执行查询之前将连接分配给命令 为此在 thisConnection.Open(); 之前添加以下行;

        nonqueryCommand.Connection=thisConnection;
        

        【讨论】:

        • 如果您像操作一样使用connection.CreateCommand,则连接已经分配给该命令的实例。
        【解决方案6】:

        您必须执行查询并在此之后关闭您的连接,如下所示

        nonquerycommand.ExecuteNonQuery();
        

        或者如果你想检查查询是否被执行

        if(nonquerycommand.ExecuteNonQuery()>0){ //some message or function }
        

        返回值是受语句影响的行数。

        【讨论】:

          猜你喜欢
          • 2013-03-02
          • 2021-07-23
          • 2017-10-24
          • 2015-02-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多