【问题标题】:Insert into the database "MDF" does not work插入数据库“MDF”不起作用
【发布时间】:2014-01-05 19:52:01
【问题描述】:

老实说,我已经尝试了很多方法,但我无法在数据库中提供简单的 INSERT。请问有人能告诉我这段代码有什么问题吗?

using (SqlConnection con = new SqlConnection(AcessoBD.ConnectionString))
{
    string queryUsuario = @"INSERT INTO si_usuario (senha, login) VALUES ('aaa', 'aaa');";

    using (SqlCommand cmd = new SqlCommand(queryUsuario, con))
    {
       con.Open();
       cmd.BeginExecuteNonQuery();

    }
}

明确表示我已经尝试过: cmd.ExecuteNonQuery(); 但它没有用!

有趣的是,我可以使用相同的结构进行上面的 bench 查询,甚至只更改查询。 是权限问题吗?但是没有错误发生!

public class AcessoBD
    {
        static public String ConnectionString
        {
            get
            {    
                return ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString;
            }
        }
    }

表结构

CREATE TABLE [dbo].[si_usuario] (
    [id]    INT           IDENTITY (1, 1) NOT NULL,
    [senha] VARCHAR (100) NOT NULL,
    [login] VARCHAR (100) NOT NULL,
    CONSTRAINT [PK_si_usuario] PRIMARY KEY CLUSTERED ([id] ASC)
);

App.config

<add name="Conexao" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Base\Database.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

【问题讨论】:

  • 你的连接字符串是什么样的?
  • 你说的没有用是什么意思?有任何异常或错误消息吗?
  • 如果有任何错误,我很抱歉,但我正在使用谷歌翻译。我把连接字符串。看那个!
  • 没有错误信息出现!但是当我查看数据库时,插入不起作用!
  • 你仍然是 NOT SHOWING 存储在配置文件中的实际连接字符串

标签: c# sql sql-server sqlconnection sqlcommand


【解决方案1】:

一定是权限问题。您的代码在 SQL Server 2012 开发人员版本中运行良好。请参阅下面的快速测试。

我只能假设您使用的是 Visual Studio 附带的 SQL Server express,并且没有授予受信任用户对表的 INSERT、UPDATE、DELETE 权限。

下载 SQL Server Management Studio Express 并开始调试您的问题!

http://msdn.microsoft.com/en-us/evalcenter/hh230763

查看 Windows 应用程序日志或 SQL Server 错误日志,看看您是否忽略了 C# 程序中的错误。使用分析器跟踪与数据库的连接,以确保您正在传递 INSERT。

看看登录/用户映射下的安全性。用户是否使用默认模式 dbo 映射到数据库?你给了他们什么许可。

如果他们只有公共,添加 db_datareader 和 db_datawriter 以便可以读取/写入所有表。

否则,在表级别授予他们权限。但是你会为每个表都这样做,更多的维护。

查看我关于使用 SSMS 创建登录名/用户的博客文章。

http://craftydba.com/?p=4369

祝你好运

-- Code works fine!
use tempdb
go

CREATE TABLE [dbo].[si_usuario] (
    [id]    INT           IDENTITY (1, 1) NOT NULL,
    [senha] VARCHAR (100) NOT NULL,
    [login] VARCHAR (100) NOT NULL,
    CONSTRAINT [PK_si_usuario] PRIMARY KEY CLUSTERED ([id] ASC)
);
go

INSERT INTO si_usuario (senha, login) VALUES ('aaa', 'aaa');
go

select * from si_usuario
go

【讨论】:

  • 感谢您的提示。我会在这里试试。 :)
【解决方案2】:

尝试改成这样:

using (SqlConnection con = new SqlConnection(AcessoBD.ConnectionString))
{
    con.Open();
    using (SqlCommand cmd = con.CreateCommand())
    {
        cmd.CommandText = @"INSERT INTO si_usuario (senha, login) VALUES ('aaa', 'aaa');";
        cmd.ExecuteNonQuery();

    }
}

【讨论】:

  • 您是否尝试过选择或更新?您是否在 Visual Studio 上启用了异常暂停?您是否尝试过在查询分析器中使用相同的凭据、服务器 ... 运行语句?
  • 选择作品,但删除、更新和插入不起作用!
  • 也不例外。我已经提出了相同的查询,并且 INSERT 已正确完成。
  • 如果选择有效但没有修改操作,那肯定是权限问题。请检查用户和给定表的授权。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多