c# - 使用 C# 中的子查询 Access 数据库 INSERT

标签 c# asp.net ms-access

我有两个 Access 表:用户和分数。
用户表包含列:id(自动递增用户 id)、用户名、密码 - id 是主键 分数表有列:id(来自用户的用户 ID),highScore - 没有主键

在 C# 方法中,我将 username 和 score 作为参数,我想插入到 scores 表中,以便在 id 字段中是用户名与提供的用户名匹配的用户的 id。

到目前为止,我尝试过的命令是:

string insertCommand = @"INSERT INTO scores([id], [highScore])
                         VALUES((SELECT id FROM users WHERE username = @username), @score);";

这会抛出:查询输入必须包含至少一个表或查询。

所以在四处寻找之后,我发现 Access DB 与通常的 SQL 有点不同,所以我尝试使用 DLookup:

string insertCommand = @"INSERT INTO scores([id], [highScore])
                         VALUES(DLookup(""id"", ""users"", ""username = '@username'""), @score);";

这通过了,但是结果行是空的。所以我基本上得到一个不为 NULL 的空行。

我绝对确定参数包含在命令执行之前添加的值。

command.Parameters.AddWithValue("@username", username);
command.Parameters.AddWithValue("@score", points);

command.CommandText = insertCommand;

command.ExecuteNonQuery();

所以我不知道我在这里做错了什么。我什至应该这样做吗?我能否以某种方式加入插入内容中的用户和分数表?

最佳答案

如果您不介意稍微更改一下查询,以下应该可行:

string insertCommand = @"INSERT INTO scores (id, highscore)
                         SELECT id,  @highScore FROM users WHERE username = ?;";

这是我在测试中使用的代码块:

var highScore = 99;
var username = "johndoe";
OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());

string insertCommand = @"INSERT INTO scores (id, highscore)
                        SELECT id, @highScore FROM users WHERE username = @username;";

OleDbCommand cmd = new OleDbCommand(insertCommand, con);
cmd.Parameters.AddWithValue("@highScore", highScore);
cmd.Parameters.AddWithValue("@username", username);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

关于c# - 使用 C# 中的子查询 Access 数据库 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766717/

相关文章:

c# - 使用对通用对象的引用作为参数

c# - 特定 ASP.NET MVC4 URL 的自定义配置设置

c# - sql更新查询不更新数据库

sql - 查询过滤,在灵活性和易于执行之间找到平衡

c# - protobuf-net:序列化和反序列化带有长度前缀的可空枚举时的 ProtoException

c# - 如何删除 C# 字符串中的空格?

c# - 使用 Reflection.Emit 实现泛型接口(interface)

.net - ASP.MVC 3 安装错误

c# - 一次更新 MVC 页面的不同部分?

vba - 将表导出到另一个 Access 数据库