gpt4 book ai didi

c# - 为什么 SQL Server 数据库用户写入错误的架构?

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:21 25 4
gpt4 key购买 nike

在我的数据库中,我有 2 个模式:[dbo][rch]([rch] 被选为我们的“存档”数据,以便这些表不会出现在 [dbo] 表之前)。

我在 SQL Server Management Studio (SSMS) 中为此表创建了一个名为 rchuser 的用户:

general

  • 注意上面添加的用户 rch 被列为默认模式。

owned

  • 注意上面这个新用户拥有 db_ownerrch

membership

假设我有这个 SQL 插入:

public static int AddRecord(object value, string sqlConnection)
{
int result = 0;
using (var conn = new System.Data.SqlClient.SqlConnection(sqlConnection))
{
conn.Open();
var sqlCmd =
"INSERT INTO Table1 ([Value], [Stamp]) " +
"VALUES (@Value, GETDATE()); ";
using (var cmd = new System.Data.SqlClient.SqlCommand(sqlCmd, conn))
{
cmd.Parameters.AddWithValue("@Value", value);
result = cmd.ExecuteNonQuery();
}
}
return result;
}

我使用我的 rchuser 凭据向该方法传递了一个连接字符串。

 var conn = "Data Source=localhost;Initial Catalog=DatabaseN;User Id=rchuser;Password=password;"

没有错误,结果为 1,但新记录不在我的 [rch] 模式的对应表中。

就好像数据库完全忽略了这个用户默认使用 [rch] 模式这一事实。

我什至尝试使用 rchuser 登录到 SSMS 数据库以手动执行命令。同样,没有错误。数据进入 [dbo]

如何将所有数据库输入定向到另一个模式?

最佳答案

如果您在一个数据库中有多个模式,那么我的建议是始终明确指定您想要的模式。亚伦·伯特兰 (Aaron Bertrand) 有 a good article为什么你应该这样做,即使你只有一个架构。

所以修改你的sql语句为

INSERT INTO [rch].Table1...

你会一切都好。

我注意到这并没有回答你的标题,但它确实回答了你的问题。

至于为什么您的查询没有默认 [rch] 架构,我不知道。我在 SQL Server 2008 R2 中复制了您的设置,当我运行您的原始查询时,插入确实按预期进入了 rch 表。

编辑:

我做了一些谷歌搜索,我怀疑您的问题是由于将 sysadmin 服务器角色授予 rchuser 登录引起的。我把我的改成了 sa

Login Properties screenshot

,现在插入内容默认进入 [dbo] 架构,即使 rchuser 的默认架构为 [rch]。

因此,如果您删除 sysadmin 服务器角色,它应该会按预期开始工作。

关于c# - 为什么 SQL Server 数据库用户写入错误的架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com