c# - 我不能在表中插入除“Id”值之外的任何内容
问题描述
我目前正在从头开始构建我的第一个 Web 应用程序并试图弄清楚 C# 和 SQLDatabases 的通信,我一直在尝试将自定义数据输入到表中。
由于某种原因,这段代码工作得很好,它成功地在新行中添加了“Id = 3”:
sql = " INSERT INTO dbo.AspNetUsers (Id) VALUES (3)";
SqlCommand command = new SqlCommand(sql, cnn);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.InsertCommand = new SqlCommand(sql, cnn);
adapter.InsertCommand.ExecuteNonQuery();
但是这个没有,唯一的区别是它在不同的列中添加了另一个项目,而不是前一个它只添加“Id”:
sql = " INSERT INTO dbo.AspNetUsers (Id, UserName) VALUES (3, testName)";
SqlCommand command = new SqlCommand(sql, cnn);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.InsertCommand = new SqlCommand(sql, cnn);
adapter.InsertCommand.ExecuteNonQuery();
最后,我遇到的另一个问题是,我无法使用 ExecuteReader() 和 ExecuteScalar() 从我创建的表中读取数据,而不是使用框架身份验证系统设置的表。
提前致谢。
解决方案
此代码解决了这两个问题:
- UserName 的值作为 SQL 参数传递,建议将其用于字符串值以避免 SQL 注入和其他可能的问题,
- SQL 命令用 ExecuteNonQuery 执行,调用不返回任何结果的 SQL 命令的正确方法
SqlCommand cmd = new SqlCommand();
string sql = " INSERT INTO dbo.AspNetUsers (Id, UserName) VALUES (3, @testName)";
cmd.Parameters.AddWithValue("@testName", "testName");
cmd.Connection = con;
cmd.CommandText = sql;
con.Open();
cmd.ExecuteNonQuery();
推荐阅读
- aws-lambda - 你如何在 lambda 之外进行异步设置?
- html - Bootstrap 4.1 之间的浮动徽标
- mysql - 通过其用户获取属于某个组的用户数和属于该组的订单数
- android - 房间:带有字符串主键的 Fts4
- javascript - 即使我没有使用它,也无法在 react-native 中找到变量错误
- c# - 使用几乎相同的类数据填充一个类
- celery - 我可以使用数据类(或类似的)作为 Celery 任务的参数和返回值吗?
- java - Google FireStore 支持的自定义对象的限制?
- ubuntu - iwconfig - /proc/net/wireless 不存在
- python - 带有 virtualenv 的 Ansible winrm